我有以下代码:
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((的执行,但主线程将等到子线程完成其工作。