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

jor*_*hmv 1 c# performance asynchronous

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

Task<SomeType> t1 = 
    Task.Factory.StartNew(() => Service.GetSomething(readQuery, contextId));
Task.WaitAll(t1);
Run Code Online (Sandbox Code Playgroud)

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

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

Ree*_*sey 6

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

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

在某些情况下可能会有一个好处,但只有在您Task使用以特定TaskScheduler方式卸载工作的特定计划时才会出现这种情况(即:将任务推送到UI线程).

此外-通常情况下,如果在等待一个任务,而不是使用Task.WaitAll,你可以直接打电话Wait()(或取Task<T>Result):

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

// OR:

// Block then get the result
SomeType result = t1.Result;
Run Code Online (Sandbox Code Playgroud)

Task.WaitAll() 如果你在等待多个任务,那真的是合适的.