Web API:使用CancellationToken的DelegatingHandler

时间:2013-05-28 20:38:51

标签: asp.net-web-api cancellation-token

典型的Web API DelegatingHandler实现看起来像这样......

protected async override Task<HttpResponseMessage> SendAsync(
    HttpRequestMessage request, CancellationToken cancellationToken)
{
    // TODO: Do work before inner handler here

    // Call the inner handler.
    var response = await base.SendAsync(request, cancellationToken);

    // TODO: Do work _after_ inner handler here

    return response;
}

处理 CancellationToken.IsCancellationRequested == true 的首选方法是什么?

我应该:

  • 生成错误响应并中断委托链?
  • 什么都不做(如上所述)?
  • 选项'C'?

1 个答案:

答案 0 :(得分:5)

取消令牌时,

Cancellation semantics会抛出异常(例如CancellationToken.ThrowIfCancellationRequested)。

如果您没有任何异步工作要做(base.SendAsync除外),那么您可以忽略该令牌。

请注意,如果令牌被取消,await base.SendAsync可能会引发异常。该异常将自然传播,但如果您无论是否取消都必须进行任何清理,请使用usingfinally阻止。