我开始思考异步编程时,是否应该始终使用以下模式:
public async Task<int> MyMethodAsync()
{
return await SomeOtherMethodAsync();
}
或者说它是否安全且不会产生任何缺点,将此代码简化为:
public Task<int> MyMethodAsync()
{
return SomeOtherMethodAsync();
}
我已经开始在互联网上阅读,但找不到任何答案,所有异步编程都只提到第一种模式。 更新1 根据一些答案,在简单的方法中,第二种方法是适当的。但如果我按以下方式扩展和编写方法 - 这仍然与上述代码相关,只是为了展示
SomeOtherMethodAsync
方法内部的内容:public async Task<int> SomeOtherMethodAsync()
{
var result1 = await LongRunningThirdMethod();
var result2 = await LongRunningForthMethod();
return result1 + result2;
}
并修改我的第二个示例为:
public Task<int> MyMethodAsync()
{
SomeSyncMethod();
SomeOtherSyncCode();
return SomeOtherMethodAsync();
}
SomeOtherMethodAsync
在开始LongRunningFourthMethod
之前不必要等待LongRunningThirdMethod
- 实例化这两个任务,然后等待它们,以便它们可以并行运行。 - Ant P