异步编程与线程编程有何不同?
- 论坛
- 异步编程与线程编程有何不同?
24 浏览
异步编程与线程编程有何不同?
最近我在这里阅读了一些有关async
的文章:http://www.asp.net/web-forms/tutorials/aspnet-45/using-asynchronous-methods-in-aspnet-45,说:
当你进行异步工作时,并不总是在使用线程。
例如,当你发起一个异步的网络服务请求时,
在异步方法调用和await之间,ASP.NET将不会使用任何线程。
因此,我想要理解的是,如果我们不使用任何线程来进行并发执行,它如何变成async
?"你并不总是在使用线程"是什么意思?
让我首先解释一下我对使用线程的了解(这只是一个快速的例子,当然线程可以在其他情况下使用,而不仅限于UI和Worker方法学中)
- 你有UI线程用于接受输入、输出。
- 你可以在UI线程中处理事务,但这会导致UI无响应。
- 所以我们假设我们有一个与流相关的操作,我们需要下载某种数据。
- 同时我们也允许用户在下载期间做其他事情。
- 我们创建一个新的工作线程来下载文件并更新进度条。
- 一旦完成,线程就会被结束。
- 我们从UI线程继续。
根据情况,我们可以在UI线程中等待工作线程,但在等待工作线程之前,在文件下载时,我们可以在UI线程上做其他事情,然后再等待工作线程。
async
编程不是相同的吗?如果不是,有什么区别?我读到async
编程使用ThreadPool
从中获取线程。