嗨我在webapi上有一个关于async / await的小问题。这两种用法之间是否有区别,哪一种被认为是正确的?阅读SimilarQuestion on SO之后我猜Variant 1因为开销较少而更好,但我需要确定,因此我再问一次;)
变式1:
public Task<string> Get(){
return Bar();
}
变体2:
public async Task<string> Get(){
return await Bar();
}
方法:
public async Task<string> Foo(){
await Task.Delay(5000);
return "Done";
}
public Task Bar(){
return Foo();
}
感谢提示
答案 0 :(得分:1)
变体2是不可能的,因为你无法做到
public async Task<string> Get(){
return await Bar();
}
public Task Bar(){
return Foo();
}
await
仅适用于async
而Task Bar()
不适用async
...仅适用于Task
。
看看Can I not await for async Task without making it async void? 它说
处理此问题的正确方法是等待方法,然后进行处理 调用方法异步任务。这将有一个 async的级联效果会通过您的代码传播。
话虽如此,你留下了变种1。对于大多数情况来说,这是一个不错的选择。如果您觉得异步等待会对性能产生负面影响,那么您可能会使错误的方法异步。但同样,你需要校准它。对于解决所有方法的问题,不能有一个共同的答案。
另见: