asynchronous/等待与线程

在.Net 4.5中,Microsoft已经添加了新的Async/Awaitfunction来简化asynchronous编码。 不过,我想知道

  1. Async/Await完全取代旧的方式使用Threads
  2. Async/Await能够执行任何Thread可以asynchronous执行的操作吗?
  3. Async/Await只能用于WebClient.DownloadStringAsync方法,或者我可以将任何同步方法转换为使用Async/Await而不是阻塞主线程?

它可以完全取代旧的使用线程的方式?

没有。一个线程可以做更多有用的事情。 等待是专门devise来处理一些花费时间,最典型的是一个I / O请求。 传统上在I / O请求完成时用callback完成。 编写依赖这些callback的代码是相当困难的,等待大大简化它。

能够做一个线程可以asynchronous做什么?

大致。 等待只是照顾处理延迟,它不会做任何线程的事情。 await expression式 ,await关键字的右边是什么使得工作完成。 理想情况下,它根本不使用线程,它发布驱动程序请求,一旦驱动程序完成数据传输,它将生成完成通知callback。 networking是目前最常见的使用方式,数百毫秒的延迟是常见的,是桌面或局域网向“云”转移的必然副作用。 同步使用这些服务会使UI非常反应。

只能用于WebClient.DownloadStringAsync等方法

不可以。您可以使用任何返回任务的方法。 XxxxAsync()方法只是在.NET框架中预先编写的,用于需要时间的常见操作。 就像从networking服务器下载数据一样。

关于这个的官方声明。 虽然你应该先理解线程和asynchronous编程之间的区别,然后一味地用别人replace一件事情。