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

Sna*_*yes 4 c#

我有以下代码:

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

Task t1 = new Task(() => execute(act1));

t1.Start();
Run Code Online (Sandbox Code Playgroud)

怎样睡觉里面行动?我尝试过:

Thread.Sleep(TimeSpan.FromSeconds(5));
Run Code Online (Sandbox Code Playgroud)

Task.Delay(TimeSpan.FromSeconds(5));
Run Code Online (Sandbox Code Playgroud)

Pau*_*her 6

Task.Delay(TimeSpan.FromSeconds(5));
Run Code Online (Sandbox Code Playgroud)

Task默认情况下会创建一个异步运行的新文件。因此,您的方法将继续独立于Task. 您有多种选项可以同步到您的Task.

如果您处于某种async方法中,您可以等待Task

await Task.Delay(TimeSpan.FromSeconds(5));
Run Code Online (Sandbox Code Playgroud)

否则,您可以随时使用Task.Wait

Task.Delay(TimeSpan.FromSeconds(5)).Wait();
Run Code Online (Sandbox Code Playgroud)

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

在你的情况下,你可以让你的 Lambdaasync

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