【发布时间】:2015-07-14 23:32:07
【问题描述】:
换句话说,是
var task = SomeLongRunningOperationAsync();
task.Wait();
功能与
相同SomeLongRunningOperation();
换一种说法,就是
var task = SomeOtherLongRunningOperationAsync();
var result = task.Result;
功能相同
var result = SomeOtherLongRunningOperation();
根据Task.Wait and Inlining,如果Wait'd on的Task已经开始执行,Wait必须阻塞。但是,如果它还没有开始执行,Wait 可能能够将目标任务从其排队的调度程序中拉出并在当前线程上内联执行。
这两种情况是否仅仅是决定任务将在哪个线程上运行的问题,如果你仍然在等待结果,这有关系吗?
如果在异步调用和Wait() 之间没有执行任何操作,那么使用异步表单比同步表单有什么好处吗?
【问题讨论】:
-
由于 SomeLongRunningOperation 返回了一些结果,我假设你的意思是
var result = task.Result -
Task.Result 是一个阻塞操作。无需
Wait() -
是的。那么为什么要
Wait()呢? -
你说吧。没必要。
var result = Task.Result;就够了。 -
罗伯特,你
Wait一个任务,如果它没有返回任何东西。
标签: c# asynchronous task