Tro*_*yvs 4 c# asynchronous task async-await
我使用 VS2019 和 dotnetcore 3.1 作为一个简单的控制台应用程序,我有这个代码片段:
public static async Task F()
{
await Task.Delay(1000);
return Task.CompletedTask; // error
}
Run Code Online (Sandbox Code Playgroud)
它无法编译。我只是创建一个 (1) 异步方法,(2) 返回一个任务。为什么这个 return 语句不能编译?如何修复它以满足我的(1)和(2)要求?
多谢。
您的方法在功能上可以简化为这样。
\n\npublic static Task F() \n{ \n return Task.Delay(1000); \n}\nRun Code Online (Sandbox Code Playgroud)\n\n仅当满足以下条件时,返回Task.CompletedTask实例才有用:
async/awaitvoid如果您要使其不是异步的,则有效)例子:
\n\npublic static Task F() \n{ \n if (someConditionToShortCircutTheMethod) \n return Task.CompletedTask;\n\n // rest of logic\n return Task.Delay(1000); \n}\nRun Code Online (Sandbox Code Playgroud)\n\n一旦你创建了你的方法async,那么任务实际上被返回的事实就被抽象出来了。这可以使代码更易于使用,特别是当代码有多个点等待 I/O 操作完成时。
public static async Task F() \n{ \n if (someConditionToShortCircutTheMethod) \n return;\n\n // rest of logic\n await Task.Delay(1000); \n await Task.Delay(1000);\n // no return necessary, async Task has a similar flow as return type void\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我还建议回顾一下之前的这些问题:
\n\n\nawait Task.Delay(1000);方法已经创建并返回 a Task,所以你可以写
public static async Task F()
{
await Task.Delay(1000);
}
Run Code Online (Sandbox Code Playgroud)
或者await与使用Task.CompletedTask;
public static async Task F()
{
await Task.Delay(1000);
await Task.CompletedTask;
}
Run Code Online (Sandbox Code Playgroud)
否则你应该将返回类型更新为Task<Task>,这没有多大意义
public static async Task<Task> F()
{
await Task.Delay(1000);
return Task.CompletedTask;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3064 次 |
| 最近记录: |