C# 为什么删除async/await会导致Task到Task的转换错误

C# 为什么删除async/await会导致Task到Task的转换错误,c#,asynchronous,async-await,C#,Asynchronous,Async Await,我有以下通用和非通用方法: 公共异步任务LoadAsyncGuid id { return wait_someService.SomeMethodAsyncid; } 异步任务LoadObjectAsyncGuid=>Wait LoadAsyncid; 为了遵循这一点,我认为可以通过从LoadObjectAsync方法中删除async/await使代码更加高效,因为它是一个passthrough。但是,当我将签名更改为: 任务LoadObjectAsyncGuid=>LoadAsyncid; 我

我有以下通用和非通用方法:

公共异步任务LoadAsyncGuid id { return wait_someService.SomeMethodAsyncid; } 异步任务LoadObjectAsyncGuid=>Wait LoadAsyncid; 为了遵循这一点,我认为可以通过从LoadObjectAsync方法中删除async/await使代码更加高效,因为它是一个passthrough。但是,当我将签名更改为:

任务LoadObjectAsyncGuid=>LoadAsyncid; 我得到一个错误,说我不能隐式地从一个任务转换到另一个任务。我想知道的是async Wait如何避免这种转换问题?我知道通用差异禁止任务转换,但为什么这不适用于异步/等待版本

试图听从斯蒂芬·克利里的建议

那篇文章中的建议是将async/wait保留在那里,除非您需要删除它。在本例中,该方法看起来像一个passthrough,但实际上正在执行隐式转换

我想知道的是为什么AsyncWait避免了这个转换问题

使用async和await,代码将T强制转换为对象,这是始终允许的

如果没有async和await,代码将强制转换任务到任务,这是不允许的。这是因为类不能支持,并且没有ITask类型

试图听从斯蒂芬·克利里的建议

那篇文章中的建议是将async/wait保留在那里,除非您需要删除它。在本例中,该方法看起来像一个passthrough,但实际上正在执行隐式转换

我想知道的是为什么AsyncWait避免了这个转换问题

使用async和await,代码将T强制转换为对象,这是始终允许的


如果没有async和await,代码将强制转换任务到任务,这是不允许的。这是因为类不能支持,并且没有ITask类型。

它们都是泛型的。它们都是泛型的。