我有一个始终被阻止的任务,并且我有一个 CancellationToken 传递给它,用于取消任务。然而,Continuation 任务永远不会执行,它设置为在 Task 取消时执行。代码是:
_tokenSrc = new CancellationTokenSource();
var cnlToken = _tokenSrc.Token;
Task.Run(() =>
// _stream.StartStream() blocks forever
_stream.StartStream(), cnlToken)
.ContinueWith(ant =>
{
_logger.Warn("Stream task cancellation requested, stopping the stream");
_stream.StopStream();
_stream = null;
_logger.Warn("Stream stopped and task cancelled");
}, TaskContinuationOptions.OnlyOnCanceled);
稍后在代码的其他地方......
_tokenSrc.Cancel();
我必须为 _stream.StartStream() 使用任务的原因是这个调用永远阻塞(我无法控制的 api,请注意 _stream 指的是从 web 服务流数据的第三方 Api)所以我不得不调用它在另一个线程上。
取消任务的最佳方法是什么?