1

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

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

只做一个异步任务然后等待它有好处吗?执行时间将是相同的(如果不是更多,因为异步会增加一些开销),但可能是处理器级别的一些东西?

我只是想弄清楚这段代码是否不必要(我认为是),如果我可以将其更改为一个简单的调用,谢谢你的想法。

4

1 回答 1

6

只做一个异步任务然后等待它有好处吗?执行时间将是相同的(如果不是更多,因为异步会增加一些开销),但可能是处理器级别的一些东西?

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

在某些情况下可能会有好处,但这只有在您使用特定方式(即:将任务推送到 UI 线程)卸载工作的Task特定情况下调度才会是正确的。TaskScheduler

另外 - 通常,如果等待单个任务,而不是使用Task.WaitAll,您可以调用Wait()(或获取Task<T>'s Result):

// Just block until it's done
t1.Wait();

// OR:

// Block then get the result
SomeType result = t1.Result;

Task.WaitAll()仅当您等待多个任务时才真正合适。

于 2013-05-03T15:37:34.853 回答