取消c#中的任务

时间:2016-04-28 19:11:38

标签: c# task

我在c#中取消任务时遇到问题,任务[0]没有停止执行。 这是代码。

 var tokenSource = new CancellationTokenSource();
 var token = tokenSource.Token;
 Task[] tasks = new Task[2];
 tasks[0] = Task.Run(() => {
 SomeClass Object1  = new SomeClass();
    if (tasks[1].IsCompleted)
    {
        tokenSource.Cancel();
    }
 },token);
 tasks[1] = Task.Run(() =>
 {
     Application.EnableVisualStyles();
     Application.SetCompatibleTextRenderingDefault(false);
     Application.Run(new Form1());
 });

2 个答案:

答案 0 :(得分:1)

首先,您应该运行tasks[1];

其次,您应该检查循环中是否已完成task[1]并从任务返回,您的示例中不需要CancellationToken

Task[] tasks = new Task[2];

// run task[1]

tasks[0] = Task.Run(() => {
    SomeClass Object1  = new SomeClass();
    while (true)
    {
        if(tasks[1].IsCompleted)
        {
            return;
        }
    }

},token);  

答案 1 :(得分:0)

我解决了这个问题,只需添加“Task.WaitAll(tasks [1]);”在代码的最后。

         Task[] tasks = new Task[2];

         tasks[0] = Task.Run(() => 
         {
         SomeClass Object1  = new SomeClass();
            if (tasks[1].IsCompleted)
            {
                tokenSource.Cancel();
            }
         });
         tasks[1] = Task.Run(() =>
         {
             Application.EnableVisualStyles();
             Application.SetCompatibleTextRenderingDefault(false);
             Application.Run(new Form1());
         });

        Task.WaitAll(tasks[1]);

感谢大家的投入。