非异步方法返回Task<>
本文关键字:Task 返回 异步方法 | 更新日期: 2023-09-27 17:54:32
我想知道这两种异步模式是否有区别。显然它们会起作用。我想知道是否有隐藏的陷阱或性能开销。在这两种情况下,aggregateexception调用堆栈会发生什么?
//------Pattern1-------- PassThruMethod is awaiting
public async void EventHandler()
{
await PassThruMethod();
}
public async Task<int> PassThruMethod()
{
return await MyAsyncMethod();
}
public Task<int> MyAsyncMethod()
{
return Task.Run(() => 1);
}
//---Pattern2----- PassThruMethod is not awaiting
public async void EventHandler()
{
await PassThruMethod();
}
public Task<int> PassThruMethod()
{
return MyAsyncMethod();
}
public Task<int> MyAsyncMethod()
{
return Task.Run(() => 1);
}
如果您不使用await
,则无需使用async
-因为您的PassThruMethod
不需要await
,因此不要使用它。如果你最终发现它不够好,你可以随时更改它。
使用await
确实有一些开销(不是很大,但有一些),所以对于这样的情况,没有理由使用它。返回Task
就可以了。