使用异步等待或任务?

use*_*153 9 c# asynchronous task

您已经构建了一个复杂的计算算法.这需要相当长的时间才能完成,并且您希望确保应用程序保持响应.你是做什么?

  • A.使用async/await.
  • B.同步运行代码.
  • C.使用Task.Run.
  • D.使用BackgroundWorker.

答案是C.但是,有人可以解释为什么A)不正确吗?因为问题并不是说复杂的算法是CPU绑定的.如果它是CPU绑定的,那么我们将不得不使用任务(一种我不太了解的推理,但我知道任务确实有助于导致当前线程被挂起直到它们完成).另外,请解释如何决定何时使用async/await,并使用Tasks.

Sti*_*gar 2

我认为“计算”意味着在没有其他信息的情况下CPU限制算法。如果算法是 IO 绑定的,那么 async/await 不仅可以接受,而且是正确的答案。

  • (续)或者您可以使用“Dispatcher.Invoke”或“Control.Invoke”,或者您可以推出自己的 AsyncEnumerator (http://blogs.msdn.com/b/pfxteam/archive/2010/11/21 /10094564.aspx)。我的观点是,大约有一百万种方法可以做到这一点,而“async/await”恰好是其中之一,即使它是每个人首先想到的事情(这是可以理解的)。 (2认同)