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

本文关键字:什么 等待 然后 一个 异步 方法 调用 | 更新日期: 2023-09-27 18:12:14

我正在看一些代码做以下事情:

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

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

我只是想弄清楚如果这段代码是不必要的(我认为是),如果我能把它改成一个简单的调用,谢谢你的想法。

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

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

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

在某些情况下,可能是一个好处,但这只会在你调度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;

Task.WaitAll()只适用于等待多个任务的情况。