【发布时间】:2017-10-23 22:11:28
【问题描述】:
这可能是因为我对标记async的方法在编译过程中会发生什么缺乏了解,但是为什么这个方法会编译?
public async Task<bool> Test()
{
return true;
}
只是在这里寻找一个解释,所以我可以更好地理解发生了什么。 Task 会自动包装吗?为什么允许这种方法? (它不遵守方法签名,即返回一个Task<bool>)。
更新: 看来这也适用于以下参数:
public void Main()
{
Input(Test);
}
public async Task<bool> Test()
{
return true;
}
public void Input(Func<Task<bool>> test)
{
}
其中,Test 方法隐式返回 Task。
【问题讨论】:
-
您不需要在
async方法中使用await某些东西。你问的是这个吗? -
@RufusL 对,我明白这一点。但我不明白为什么方法 1 不必返回一个 Task
(根据它的签名它应该) -
Async return types 返回任务的结果,而不是任务本身。在您的示例中,
async Task<bool>返回bool。 -
你的问题有点混乱。假设您有
async Task<bool> FooAsync() { await Whatever(); return true; },您还会问为什么要编译该方法吗?我想你可能不明白 async 方法中的Task<T>returns 和T;return t;表示在异步方法中使用此 T 完成任务,就像return t;表示在非异步代码中 使用 T 完成此方法。
标签: c# async-await task task-parallel-library