Asynchronous 尝试在自定义异步方法中返回结果不会';不编译

Asynchronous 尝试在自定义异步方法中返回结果不会';不编译,asynchronous,task,.net-5,Asynchronous,Task,.net 5,我一直在尝试创建一个可以等待的方法,即在.NET5中实现异步 根据我对异步的了解,这应该是可行的: public Task<int> AsyncMethod() { return 3; } 公共任务异步方法() { 返回3; } 当然,这将立即返回,等待它没有意义,但问题是Visual Studio在“返回”行上给了我一个错误,错误是“无法隐式地将类型'int'转换为'System.Threading.Tasks.Task'”,这看起来很奇怪,因为我认为这正是您应该做的

我一直在尝试创建一个可以等待的方法,即在.NET5中实现异步

根据我对异步的了解,这应该是可行的:

public Task<int> AsyncMethod()
{
    return 3;
}
公共任务异步方法()
{
返回3;
}
当然,这将立即返回,等待它没有意义,但问题是Visual Studio在“返回”行上给了我一个错误,错误是“无法隐式地将类型'int'转换为'System.Threading.Tasks.Task'”,这看起来很奇怪,因为我认为这正是您应该做的


如果我将
return 3
更改为
return Task.FromResult(3)
,那么它可以工作,但我想知道为什么第一个不能工作,这两个东西是完全一样的?

。。。我认为只添加了“async”关键字是因为您需要在方法体中使用“await”?有点
async
将方法转换为状态机。然后可以直接返回值(状态机处理
Task
s)。如果你不让它成为一个状态机,你必须自己处理
任务
转换。a-a-a-a-a-和,使其
异步
返回3
与不使其
异步
和执行
返回任务一样。FromResult(3)
?是的,这是两件不同的事情!您可以看到编译器使用sharplap.io将这些转换为什么。比较。
async
版本被转换为状态机,与您编写的代码惊人地不同。
public Task<int> AsyncMethod()
public async Task<int> AsyncMethod()