4

.Net Task 支持Task Cancellation,但我想传递取消的原因。在我的情况下,我的任务因某种原因被取消,并且任务必须以不同的方式完成每个取消原因。

CancellationTokenSource 类没有设置该原因的某些属性。如何将取消原因传递给Task?

4

1 回答 1

0

您不能将原因或消息传递给 aTask以指示原因。

Task取消实例(或其他操作)的方式是传递可以CancellationToken检查/注册的实例以确定操作是否已取消(这是任务取消的“合作”方面)。

但是,取消不会受到 的影响CancellationToken,它们会受到CancellationTokenSource通过调用各种Cancel方法重载来创建它们的影响。

此外,当任务被取消时,OperationCancelledException会引发一个派生自的异常,您可以捕获该异常。当您捕获该异常时,您可以查看该CancellationToken属性;这暴露了CancellationToken用于取消操作的 。

从那里,您可以将其传递给该属性公开的结构上的方法的覆盖Equals;如果调用返回 true,则操作被取消,您可以将其与取消原因相关联。CancellationTokenTokenEqualsCancellationTokenSource

请注意,您可能必须深入了解 中包含的异常AggregateException,因为异步操作引发的大多数异常都包含在其中。

于 2013-01-24T17:40:53.953 回答