c# - 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
}
}
所以没有await
inTestMethod
的 else 语句,代码还怎么编译?据我了解,每个可能的路径都应该包含一个await
声明?
并且result
仍然是Task<string>
而不是string
,但是执行路径只到达else
直接返回字符串的语句,怎么result
还是任务?
解决方案
方法定义中的async
关键字向编译器发出信号,它应该返回一个任务,其结果将是return
方法语句返回的任何内容。如果您删除async
关键字,编译器将抱怨返回 astring
而不是Task<string>
您期望的 a。
您可以在此处阅读有关async
返回类型的 Microsoft Docs 。
这实际上不需要await
方法中的任何语句,但是如果删除该await Task.Delay(8000);
行,您可能会看到一条警告,指出该方法将同步运行(假设您使用的是 Visual Studio)。
推荐阅读
- laravel - 类型错误:参数太少,无法在查询中起作用
- python-3.x - UnicodeDecodeError:在 python 中使用 .csv 时,'utf-8' 编解码器无法解码位置 4089 中的字节 0xa3
- matlab - OOP中的Matlab私有/嵌套函数
- php - 如何在我的 api 平台应用程序中使用外部资源
- exception - 重新抛出 RuntimeExceptions
- c# - 是否可以使用 Windows 服务或 Windows 侦听器将消息连接并接收到 IBM MQ
- ruby - 如何将浏览器控制台错误日志存储在报告文件中?
- algorithm - 我需要知道我应该为以下情况选择哪种算法
- python-2.7 - 在 pycrypto 中使用 32 字节的初始化向量
- javascript - Webpack更改css文件中的url