我应该将async / await添加到单行函数中,如:
public async Task<T> GetFoo()
{
return await HandleAsync<T>(....);
}
如果参数不需要异步调用,这是不必要的开销,我可以简单地写一下:
public Task<T> GetFoo()
{
return HandleAsync<T>(....);
}
答案 0 :(得分:6)
使用第二个重载,因为异步方法在后台(一个额外的类)转换为astate机器来处理等待的异步操作。
所以第一种方法会增加不必要的开销。第二次重载只会返回一个你仍然可以等待的任务。
我不确定异常处理如何在这里发生变化,但我认为它并没有改变。
答案 1 :(得分:0)
task
,可以在此代码之外等待,那么不,您不需要添加它。但是,您应该等待异步任务,以避免不必要的副作用。这取决于每种情况。
让我们来看看以下案例:
public Task DownloadStream(Stream target)
{
return _downloader.ToStream(target);
}
会返回一个任务,所以我想下载并处理它,我会等待它,即:
public async Task DownloadAsync()
{
Using(var stream = new MemoryStream(){
await DownloadStream(stream); //<== here i NEED to wait and not block the UI
}
}
希望你可以在你的情况下解释它。
祝你好运!答案 2 :(得分:0)
我会在你描述的情况下添加async / await。很大程度上,这是一致性的问题 - 我希望任何人都能阅读我的代码,以了解这是一个异步函数,并返回Task<T>
- 并且清理风格。
你可能觉得这是你不需要的额外仪式,这很好,这是个人品味的问题。但是,在编译的代码级别,如果有的话,差别很小。当然,如果你真的非常热衷于减少仪式,你可能不会使用C#。