如何暂停和继续TPL任务?

rya*_*lli 2 c# multithreading task-parallel-library

我有一些场景,我有几个后台任务(TPL任务),它们按照自己的时间表运行.任务1被认为具有比任务2更高的优先级.

如果调度程序想要运行任务1,我需要检查任务2是否正在运行并在任务1完成执行时暂停它.

这甚至可能吗?如果是,我怎样才能实现这一目标?

Pra*_*thy 5

您可以使用信号构造来实现此目的.

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();
    }

});
Run Code Online (Sandbox Code Playgroud)