C# 我是否可以用一个异步方法替换对wait Task.Delay的调用,该方法在wait Task.Delay中具有?
我有一个C# 我是否可以用一个异步方法替换对wait Task.Delay的调用,该方法在wait Task.Delay中具有?,c#,C#,我有一个async方法中的代码: // some actions if (App.pauseCard == true) { vm.Msg1 = "ABC"; await Task.Delay(500, cts.Token); return; } // some actions private async void SetMessageViewAsync() { vm.Msg1 = "ABC"; await Task.Delay(500, cts.Token)
async
方法中的代码:
// some actions
if (App.pauseCard == true)
{
vm.Msg1 = "ABC";
await Task.Delay(500, cts.Token);
return;
}
// some actions
private async void SetMessageViewAsync()
{
vm.Msg1 = "ABC";
await Task.Delay(500, cts.Token);
}
有人能告诉我是否可以用以下内容替换:
// some actions
if (App.pauseCard == true)
{
SetMessageViewAsync();
return;
}
// some actions
这个async
方法:
// some actions
if (App.pauseCard == true)
{
vm.Msg1 = "ABC";
await Task.Delay(500, cts.Token);
return;
}
// some actions
private async void SetMessageViewAsync()
{
vm.Msg1 = "ABC";
await Task.Delay(500, cts.Token);
}
不,不是真的。尝试将延迟增加到大约5000-您将清楚地看到第二个代码不再等待 这是因为
async void
方法是“fire and forget”-这意味着一旦执行到达第一个实际的wait
,它就会返回,并且当任务在另一个线程上进行时线程会继续执行-在这种情况下,return
会在延迟结束之前执行
如果将方法的签名更改为async Task
并wait
它,则代码将等效:
private async Task SetMessageViewAsync()
{
vm.Msg1 = "ABC";
await Task.Delay(500, cts.Token);
}
// some actions
if (App.pauseCard == true)
{
await SetMessageViewAsync();
return;
}
// some actions
不,不是真的。尝试将延迟增加到大约5000-您将清楚地看到第二个代码不再等待 这是因为
async void
方法是“fire and forget”-这意味着一旦执行到达第一个实际的wait
,它就会返回,并且当任务在另一个线程上进行时线程会继续执行-在这种情况下,return
会在延迟结束之前执行
如果将方法的签名更改为async Task
并wait
它,则代码将等效:
private async Task SetMessageViewAsync()
{
vm.Msg1 = "ABC";
await Task.Delay(500, cts.Token);
}
// some actions
if (App.pauseCard == true)
{
await SetMessageViewAsync();
return;
}
// some actions