我想知道这两个异步模式之间是否存在差异。显然他们会工作。我想知道是否存在隐藏的陷阱或性能开销。在两种情况下,使用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);
}
答案 0 :(得分:1)
如果您不使用async
,则无需使用await
- 因为PassThruMethod
不需要await
,请勿使用它。如果你最终发现它不够好,你可以随时更改它。
使用await
确实有一些开销(不是很大,但也有一些),所以对于这样的情况,没有理由使用它。返回Task
就好了。