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

C# 使用任务时如何延迟操作执行,c#,C#,我有以下代码: Action<CancellationToken> act1 = tk1 => { //sleep for 5 seconds Console.WriteLine(...); }; Task t1 = new Task(() => execute(act1)); t1.Start(); 及 与 将创建一个新的任务,默认情况下异步运行。因此,您的方法将继续独立于任务运行。您有几个选项可以同步到任务 如果您使用的是async方法,则可以等待任

我有以下代码:

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

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

t1.Start();

将创建一个新的
任务
,默认情况下异步运行。因此,您的方法将继续独立于
任务运行。您有几个选项可以同步到
任务

如果您使用的是
async
方法,则可以等待
任务

await Task.Delay(TimeSpan.FromSeconds(5));
否则,您可以始终使用
Task.Wait

Task.Delay(TimeSpan.FromSeconds(5)).Wait();
这将阻止该方法,直到
任务
完成运行

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

Action<CancellationToken> act1 = async tk1 => {
   await Task.Delay(TimeSpan.FromSeconds(5), tk1);
   Console.WriteLine(...);
};
Action act1=async tk1=>{
等待任务延迟(时间跨度从秒(5),tk1);
控制台写入线(…);
};
试试这个:

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

act1(default(CancellationToken));
Action act1=async tk1=>
{
等待任务延迟(时间跨度从秒(5.0));
控制台.WriteLine(“你好,世界!”);
};
act1(默认(取消令牌));

一个
操作
委托与一个
无效
方法相同。这使得使用
async
操作与
async void
操作相同,应该避免使用

参考文献

使用返回
任务的
Func
委托,使函数异步,然后可以对
任务使用
wait
。延迟

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

    Console.WriteLine(...);
};

await func1(cancellationToken);
Func func1=异步令牌=>{
//睡5秒钟
等待任务延迟(TimeSpan.FromSeconds(5),令牌);
控制台写入线(…);
};
等待功能1(取消令牌);

您必须等待
任务。延迟
。另外,不要使用任务构造函数,而是使用
task.Run
…使用一个返回任务的Func,使函数异步,然后您可以使用
Wait
task.Delay
Wait task.Delay(TimeSpan.FromSeconds(5))或task.Delay(TimeSpan.FromSeconds(5)).Wait(),那么您尝试过了吗?
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));
Func<CancellationToken, Task> func1 = async token => {
    //sleep for 5 seconds
    await Task.Delay(TimeSpan.FromSeconds(5), token);

    Console.WriteLine(...);
};

await func1(cancellationToken);