c# - 当我在异步方法中使用 await 时,为什么它不跳过它,以便它可以在后台工作并转到以下几行?
问题描述
我有以下代码:
protected override async void OnStart() {
await Helper.PopulateMetrics();
await Helper.LogStart();
if (Settings.Rev == REV.No && (new[] { 15, 30, 50 }).Contains(Settings.Trk2))
我想我很困惑,因为当我在 await Helper.LogStart() 中设置断点时,我在以“if (Settings ...”开头的行之前看到了他的断点
因为有一个等待应该先不被击中的代码?
下面是 LogStart() 方法的样子:
public static async Task LogStart()
{
// code
await App.CDB.InsertLogItem(logStart);
}
理想情况下,我希望这两种方法一个接一个地在后台运行,而代码立即跳过它们。
解决方案
await
关键字导致执行等待,直到函数Helper.LogStart()
完成。如果您想继续执行,您可以将返回的Task
对象存储到另一个变量await
中,稍后再使用它:
var task = Helper.LogStart();
/* something else */
await task;
推荐阅读
- javascript - Javascript,意外令牌 =>
- c# - 如何在 c# 中创建包含数字范围但价格很少的并行数组
- javascript - 未捕获的语法错误:导入声明只能出现在模块的顶层
- python - 如何修复 OverflowError: int too large to convert to float 错误?
- c# - 解决不明确的路线问题
- javascript - 如何通过传递 num1、num2 值作为参数将结果添加到“添加”变量?
- javascript - 设置表单值 Polymer JS
- python - 如何在 Python 单元测试中断言在基于 Thread 的类中抛出异常
- reactjs - next-with-apollo,SSR 不起作用,请求在客户端完成
- java - 如何在我的 AWS Linux Ec2 实例上安装 JDK 15?