首页 > 解决方案 > 当我在异步方法中使用 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);
 }

理想情况下,我希望这两种方法一个接一个地在后台运行,而代码立即跳过它们。

标签: c#async-await

解决方案


await关键字导致执行等待,直到函数Helper.LogStart()完成。如果您想继续执行,您可以将返回的Task对象存储到另一个变量await中,稍后再使用它:

var task = Helper.LogStart();
/* something else */
await task;

推荐阅读