调用方法异步,然后等待它,有好处吗?

时间:2013-05-03 15:34:36

标签: c# performance asynchronous

我正在看一些代码执行以下操作:

Task<SomeType> t1 = 
    Task.Factory.StartNew(() => Service.GetSomething(readQuery, contextId));
Task.WaitAll(t1);

只做一个异步任务然后等待它有什么好处?执行时间将是相同的(如果不是更多是由于async将添加的一些开销),但也许处理器级别的东西?

我只想弄清楚这段代码是否是不必要的(我认为是这样),如果我可以将它改成简单的电话,感谢您的想法。

1 个答案:

答案 0 :(得分:6)

  

只做一个异步任务然后等待它有什么好处?执行时间将是相同的(如果不是因为async将添加的一些开销),但可能在处理器级别?

通常,没有任何好处(并且涉及额外的开销),除非您在开始任务和阻止等待它之间执行其他工作。

在某些情况下,可能是一种好处,但只有在您安排Task并使用特定TaskScheduler卸载某个特定工作的情况时才会这样做方式(即:将任务推送到UI线程)。

此外 - 通常,如果等待单个任务,而不是使用Task.WaitAll,则只需拨打Wait()(或获取Task<T>的{​​{1}}):

Result

// Just block until it's done t1.Wait(); // OR: // Block then get the result SomeType result = t1.Result; 实际上只适用于等待多个任务的情况。