使用任务时如何延迟操作执行



我有以下代码:

Action<CancellationToken> act1 = tk1 => {
   //sleep for 5 seconds
   Console.WriteLine(...);
};
Task t1 = new Task(() => execute(act1));
t1.Start();

如何在动作中睡觉?我尝试了:

Thread.Sleep(TimeSpan.FromSeconds(5));

Task.Delay(TimeSpan.FromSeconds(5));

Task.Delay(TimeSpan.FromSeconds(5));

创建了一个新的Task,默认情况下是异步运行的。因此,您的方法将继续从Task独立运行。您有几个选择与Task同步。

如果您使用async方法,则可以等待Task

await Task.Delay(TimeSpan.FromSeconds(5));

否则,您可以始终使用Task.Wait

Task.Delay(TimeSpan.FromSeconds(5)).Wait();

这将阻止该方法,直到Task完成运行。

在您的情况下,您可以使您的lambda async

Action<CancellationToken> act1 = async tk1 => {
   await Task.Delay(TimeSpan.FromSeconds(5), tk1);
   Console.WriteLine(...);
};

尝试以下:

Action<CancellationToken> act1 = async tk1 =>
{
    await Task.Delay(TimeSpan.FromSeconds(5.0));
    Console.WriteLine("Hello, World!");
};
act1(default(CancellationToken));

Action委托与void方法相同。这使得使用async操作与应避免的async void相同。

参考异步/等待 - 异步编程中的最佳实践

使用返回TaskFunc委托,使功能异步,然后可以使用Task.Delay

使用await
Func<CancellationToken, Task> func1 = async token => {
    //sleep for 5 seconds
    await Task.Delay(TimeSpan.FromSeconds(5), token);
    Console.WriteLine(...);
};
await func1(cancellationToken);

最新更新