当我在异步方法中使用wait时,为什么它不跳过它,这样它就可以在后台工作并转到下面的行



我有以下代码:

protected override async void OnStart() {
await Helper.PopulateMetrics();
await Helper.LogStart();
if (Settings.Rev == REV.No && (new[] { 15, 30, 50 }).Contains(Settings.Trk2))

我想我很困惑,因为当我在waitHelper.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;

当我们使用await时,并不意味着它跳过代码并在后台运行。当我们在那个地方有等待时,将创建新的子线程,该新线程将处理PopularMatrix((的执行,但主线程将等到子线程完成其工作。

最新更新