Rob*_*est 1 c# asynchronous async-await
我有以下通用和非通用方法:
public async Task<T> LoadAsync(Guid id)
{
return await _someService.SomeMethodAsync(id);
}
async Task<object> LoadObjectAsync(Guid id) => await LoadAsync(id);
Run Code Online (Sandbox Code Playgroud)
尝试遵循Stephen Cleary的建议,我想通过从LoadObjectAsync方法中删除 async/await 来提高代码效率,因为它是一个传递。但是,当我将签名更改为:
Task<object> LoadObjectAsync(Guid id) => LoadAsync(id);
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息,说我不能隐式地从 转换Task<T>为Task<object>。我想知道的是 async await 如何避免这个转换问题?我知道通用差异禁止转换,Task<>但为什么这不适用于 async/await 版本?
尝试遵循 Stephen Cleary 的建议
那篇文章中的建议是“除非您需要删除它,否则将async/await留在那里”。在这种情况下,该方法看起来像一个传递,但实际上是在执行隐式转换。
我想知道的是为什么 async await 避免了这个转换问题?
使用async和await,代码将强制转换T为object,这始终是允许的。
如果没有async和await,代码将强制转换Task<T>为Task<object>,这是不允许的。这是因为类不能支持泛型variance,并且没有ITask<T>类型。
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |