异步编程与线程编程有何不同?

24 浏览
0 Comments

异步编程与线程编程有何不同?

最近我在这里阅读了一些有关async的文章:http://www.asp.net/web-forms/tutorials/aspnet-45/using-asynchronous-methods-in-aspnet-45,说:

当你进行异步工作时,并不总是在使用线程。

例如,当你发起一个异步的网络服务请求时,

在异步方法调用和await之间,ASP.NET将不会使用任何线程。

因此,我想要理解的是,如果我们不使用任何线程来进行并发执行,它如何变成async?"你并不总是在使用线程"是什么意思?

让我首先解释一下我对使用线程的了解(这只是一个快速的例子,当然线程可以在其他情况下使用,而不仅限于UI和Worker方法学中)

  1. 你有UI线程用于接受输入、输出。
  2. 你可以在UI线程中处理事务,但这会导致UI无响应。
  3. 所以我们假设我们有一个与流相关的操作,我们需要下载某种数据。
  4. 同时我们也允许用户在下载期间做其他事情。
  5. 我们创建一个新的工作线程来下载文件并更新进度条。
  6. 一旦完成,线程就会被结束。
  7. 我们从UI线程继续。

根据情况,我们可以在UI线程中等待工作线程,但在等待工作线程之前,在文件下载时,我们可以在UI线程上做其他事情,然后再等待工作线程。

async编程不是相同的吗?如果不是,有什么区别?我读到async编程使用ThreadPool从中获取线程。

0