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 次 |
最近记录: |