我在async
方法中包含以下代码:
// some actions
if (App.pauseCard == true)
{
vm.Msg1 = "ABC";
await Task.Delay(500, cts.Token);
return;
}
// some actions
有人可以告诉我是否可以替换成这个:
// some actions
if (App.pauseCard == true)
{
SetMessageViewAsync();
return;
}
// some actions
此async
方法:
private async void SetMessageViewAsync()
{
vm.Msg1 = "ABC";
await Task.Delay(500, cts.Token);
}
答案 0 :(得分:4)
不,不是。尝试将延迟增加到5000左右-您将清楚地看到第二个代码不再等待。
这是因为async void
方法是“即发即弃”的-意味着一旦执行到达第一个实际的await
,它就会返回并且该线程在另一个线程正在进行的任务中继续执行-在这种情况下,return
是在延迟结束之前执行的。
如果将方法的签名更改为async Task
和await
,则代码将等效:
private async Task SetMessageViewAsync()
{
vm.Msg1 = "ABC";
await Task.Delay(500, cts.Token);
}
// some actions
if (App.pauseCard == true)
{
await SetMessageViewAsync();
return;
}
// some actions