Answers:
OperationCanceledException
仅仅是它的基类TaskCanceledException
-因此,如果您抓住了前者,您仍然会抓住后者。
并发集合上的某些操作仅抛出OperationCanceledException
,因为不涉及任何实际任务(至少就公共API而言)。请参阅BlockingCollection.TryTake
示例。
如果OperationCanceledException
由于某个操作本身被抛出而导致该任务被取消,我可能会遇到这种情况OperationCanceledException
-您可能仍希望将其视为“只是取消”。
await enumerable.ForEachAsync( async () => { throw new ApplicationException( "Test" ); } );
某种方式将异常抛出,则将其“更改”为TaskCanceledException。知道怎么回事吗?这对我来说是个问题,因为我想通过catch(OperationCanceledException)捕获一个'true'OperationCanceledException,但是我不希望捕获到这个TaskCanceledException(它实际上应该是ApplicationException)。