任务等待方法(CancellationToken)

本文关键字:CancellationToken 方法 等待 任务 | 更新日期: 2023-09-27 18:25:29

有人能向我解释一下Task.Wait(CancellationToken)重载的用法吗?MSDN确实对此做了很多介绍…

这就是我通常处理任务取消的方式:

        var source = new CancellationTokenSource();
        var task = Task.Factory.StartNew(() => 
        {
            while (true)
            {
                source.Token.ThrowIfCancellationRequested();
            }
        }, source.Token);
        try
        {
            task.Wait();
        }
        catch (AggregateException exc)
        {
            exc.Flatten().Handle(e => e is OperationCanceledException);
        }

那么,什么时候将令牌传递给Wait方法有用呢?

任务等待方法(CancellationToken)

考虑这样一种情况:您想取消等待任务,而不实际取消任务本身。。。要么是因为任务本身不处理取消,要么是因为你确实想继续执行任务,但(比如)用"这需要一段时间……但仍在进行中。关闭浏览器是安全的。"(或者其他什么。)

在Microsoft白皮书中发现了这一点:

还有一点值得注意的是,Task.Wait()存在一个重载,它接受一个带有签名Task.Wwait(CancellationToken)的CancellationToken。这个重载接受一个令牌,以便可以取消等待;这种过载与取消任务无关,而是可能导致等待过早返回。如果使用了Task.Wait(ct),并且由于检测到令牌已发出信号而中断等待,则将抛出OperationCanceledException(ct)以指示等待操作已取消。

相关文章:
  • 没有找到相关文章