繁体   English   中英

如何暂停和继续TPL任务?

[英]How can I pause and continue a TPL task?

我遇到的情况是,我有几个后台任务(TPL任务)按各自的时间表运行。 任务1的优先级高于任务2。

如果调度程序要运行任务1,则需要检查任务2是否正在运行,并在任务1完成执行时将其暂停。

这有可能吗? 如果是,我该如何实现?

您可以使用信令构造来实现此目的。

static ManualResetEvent mre = new ManualResetEvent(false);

var Task1=Task.Factory.StartNew(() =>
{
    Console.WriteLine("Executing Task 1");
    Thread.Sleep(2000); //A Long running operation
    Console.WriteLine("Task 1 Completed");
    mre.Set(); //signal the task completion to task 2.
});


var Task2=Task.Factory.StartNew(() =>
{
    if (!Task1.IsCompleted) //check if task1 is completed.
    {
        mre.WaitOne(); //wait until Task 1 Completes
        Console.WriteLine("Executing Task 2");
        Thread.Sleep(2000);
        Console.WriteLine("Task 2 Completed");    
        doSomeTask();
    }
     else
    {
        //Task 1 is already completed
        doSomeTask();
    }

});

简单,无阻塞的方法是Task.Delay

http://msdn.microsoft.com/en-us/library/system.threading.tasks.task.delay(v=vs.110).aspx

// Some code here

await Task.Delay(2000); // Pause for 2 seconds, without blocking

// Code to execute after waiting

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM