【问题标题】:Difference between OperationCanceledException and TaskCanceledException?OperationCanceledException 和 TaskCanceledException 的区别?
【发布时间】:2012-10-13 23:23:11
【问题描述】:

OperationCanceledExceptionTaskCanceledException 有什么区别?如果我使用 .NET 4.5 并使用 async/await 关键字,我应该寻找哪一个?

【问题讨论】:

    标签: c# exception asynchronous task


    【解决方案1】:

    OperationCanceledException 只是 TaskCanceledException 的基类 - 所以如果你抓住前者,你仍然会抓住后者。

    并发集合上的一些操作只抛出 OperationCanceledException,因为没有涉及任何实际的任务(至少就公共 API 而言)。示例见BlockingCollection.TryTake

    我会抓住OperationCanceledException,以防万一任务由于本身刚刚抛出OperationCanceledException的操作而被取消-您可能仍想将其视为“只是取消”。

    【讨论】:

    • 我想出了一个 ForEachAsync 主要来自 Stephen Toub 的博客 blogs.msdn.microsoft.com/pfxteam/2012/03/05/… 。然后,如果我在await enumerable.ForEachAsync( async () => { throw new ApplicationException( "Test" ); } ); 中抛出异常,它会以某种方式“更改”为TaskCanceledException。知道那可能是什么吗?这对我来说是个问题,因为我想通过 catch ( OperationCanceledException ) 捕获一个“真正的” OperationCanceledException,但我不希望这个 TaskCanceledException (应该是 ApplicationException)被捕获。
    猜你喜欢
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 2015-01-24
    • 2023-04-09
    • 1970-01-01
    • 2019-10-21
    • 2020-12-12
    • 2013-08-07
    相关资源
    最近更新 更多