我正在使用VS2019和dotnetcore 3.1来创建一个简单的控制台应用程序,以下是我的代码片段:
public static async Task F()
{
await Task.Delay(1000);
return Task.CompletedTask; // error
}
它无法编译。我只想创建一个既是异步的(1),又返回一个任务(2)的方法。为什么这个返回语句不能编译?如何修复它以满足我的要求(1)和(2)?
非常感谢。
我正在使用VS2019和dotnetcore 3.1来创建一个简单的控制台应用程序,以下是我的代码片段:
public static async Task F()
{
await Task.Delay(1000);
return Task.CompletedTask; // error
}
它无法编译。我只想创建一个既是异步的(1),又返回一个任务(2)的方法。为什么这个返回语句不能编译?如何修复它以满足我的要求(1)和(2)?
非常感谢。
public static Task F()
{
return Task.Delay(1000);
}
只有在以下情况下返回Task.CompletedTask
实例才有用:
async/await
void
)示例:
public static Task F()
{
if (someConditionToShortCircutTheMethod)
return Task.CompletedTask;
// rest of logic
return Task.Delay(1000);
}
一旦您将方法标记为async
,实际返回的 Task 被抽象化了。这样可以使代码更易于处理,特别是在有多个等待 I/O 操作完成的点时。
public static async Task F()
{
if (someConditionToShortCircutTheMethod)
return;
// rest of logic
await Task.Delay(1000);
await Task.Delay(1000);
// no return necessary, async Task has a similar flow as return type void
}
我还建议您查阅以下先前的问题:
await Task.Delay(1000);
方法已经创建并返回了一个 Task
,因此您可以这样写:
public static async Task F()
{
await Task.Delay(1000);
}
或使用 await
与 Task.CompletedTask;
一起使用。
public static async Task F()
{
await Task.Delay(1000);
await Task.CompletedTask;
}
Task<Task>
,这没有太多意义。public static async Task<Task> F()
{
await Task.Delay(1000);
return Task.CompletedTask;
}
public static async Task F()
{
await Task.Delay(1000);
return;
}
public static async Task F()
{
await Task.Delay(1000);
}
Task.CompletedTask
。 - juharr