2

典型的 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”?
4

1 回答 1

6

取消语义是在取消标记时抛出异常(例如,CancellationToken.ThrowIfCancellationRequested)。

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

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

于 2013-05-28T20:46:29.157 回答