取消已经运行的任务

时间:2015-01-13 20:53:42

标签: c# .net-4.0 timeout task cancellation

我实现了如下两个任务之间的关系。如果timeoutTask首先完成,我想取消(或杀死)workerTask,无论如何都要这样做吗?

var timeoutTask = Task.Delay(1500);

var workerTask = Task.Run(() => { ThirdPartLibraryAPI.Run() });
var taskThatCompletedFirst = await Task.WhenAny(timeoutTask, workerTask);

        //stuff to do on timeout can be done here
if (taskThatCompletedFirst == timeoutTask)
{
  // At this point workerTask is still running.
  // how can i cancel or kill this task  
}

1 个答案:

答案 0 :(得分:1)

仅当第三方库专门提供取消支持时才可以这样做。如果是这样,你将需要使用它公开的任何工具(有许多方法来支持它)来取消操作。

如果它本身不支持取消,那么你所做的最好的就是你正在做的事情,即尽管操作还没有完成,你的程序仍在继续执行。