首页 > 解决方案 > if 语句中的异步等待

问题描述

我是 C# 异步编程的新手,如果我的问题听起来很愚蠢,我很抱歉。下面是一些代码:

static async Task Main(string[] args) {
   var result = TestMethod(false);   //result is still Task<string> rather than string
}

public static async Task<string> TestMethod(bool check) {
   if (check) {
      await Task.Delay(8000);
      return "Hello World";
   } else {
      return "Goodbye World";   // no await in else statement
   }
}

所以没有awaitinTestMethod的 else 语句,代码还怎么编译?据我了解,每个可能的路径都应该包含一个await声明?

并且result仍然是Task<string>而不是string,但是执行路径只到达else直接返回字符串的语句,怎么result还是任务?

标签: c#async-await

解决方案


方法定义中的async关键字向编译器发出信号,它应该返回一个任务,其结果将是return方法语句返回的任何内容。如果您删除async关键字,编译器将抱怨返回 astring而不是Task<string>您期望的 a。

您可以在此处阅读有关async返回类型的 Microsoft Docs 。

这实际上不需要await方法中的任何语句,但是如果删除该await Task.Delay(8000);行,您可能会看到一条警告,指出该方法将同步运行(假设您使用的是 Visual Studio)。


推荐阅读