我实现了如下两个任务之间的关系。如果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
}
答案 0 :(得分:1)
仅当第三方库专门提供取消支持时才可以这样做。如果是这样,你将需要使用它公开的任何工具(有许多方法来支持它)来取消操作。
如果它本身不支持取消,那么你所做的最好的就是你正在做的事情,即尽管操作还没有完成,你的程序仍在继续执行。