OperationCanceledException
和TaskCanceledException
之间有什么区别?如果我使用的是.NET 4.5并使用async
/ await
关键字,那么我应该关注哪一个?
答案 0 :(得分:107)
OperationCanceledException
只是TaskCanceledException
的基类 - 所以如果你抓住前者,你仍会抓住后者。
对并发集合的一些操作只抛出OperationCanceledException
,因为没有涉及任何实际的任务(至少就公共API而言)。有关示例,请参阅BlockingCollection.TryTake
。
我会抓住OperationCanceledException
以防万一由于操作本身刚刚抛出OperationCanceledException
而导致任务被取消 - 您可能仍然希望将其视为“只是取消”。