线程,任务,异步/等待,线程池

时间:2015-05-03 17:42:06

标签: c#

我在这里对多线程非常困惑:( 我正在阅读有关C#Async / Await关键字的信息。我经常读到,通过使用这个异步功能,代码被执行"非阻塞"。人们将代码示例分为两类" IO-Bound"和" CPU绑定" - 当我执行io-bound事件时我不应该使用线程,因为该线程只会等待..

我不明白......如果我不想让用户等待操作,我必须在另一个线程上执行该操作,对吗?

如果我使用Threadpool,一个" Thread" -class,delegate.BeginInvoke或TPL的实例 - 每个异步执行都在另一个线程上完成。 (有或没有回调)

1 个答案:

答案 0 :(得分:2)

这是什么意思:

假设您从数据库(在另一台服务器上)查询某些数据 - 您将发送请求并等待答案。而不是让线程阻塞并等待返回,最好注册一个在数据恢复时调用的回调 - 这是(或多或少)async / await的作用。 它将释放线程做其他事情(将其返回池中)但是一旦您的数据异步返回,它将获得另一个线程,并在您离开的点继续您的代码(它'真的是某种处理它的状态机。)

如果你的计算真的是CPU密集型(让我们说你正在计算素数)事情就不一样了 - 你不是在等待一些外部IO,你在CPU上做了很多工作 - 在这里&#39 ;更好的想法是使用一个线程,这样你的UI就不会阻塞。