我正在看一些代码执行以下操作:
Task<SomeType> t1 =
Task.Factory.StartNew(() => Service.GetSomething(readQuery, contextId));
Task.WaitAll(t1);
只做一个异步任务然后等待它有什么好处?执行时间将是相同的(如果不是更多是由于async将添加的一些开销),但也许处理器级别的东西?
我只想弄清楚这段代码是否是不必要的(我认为是这样),如果我可以将它改成简单的电话,感谢您的想法。
答案 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;
实际上只适用于等待多个任务的情况。