gpt4 book ai didi

c# - OWIN SelfHost Web Api - 请求取消 - 它是如何完成的?线程中止?

转载 作者:太空狗 更新时间:2023-10-29 19:45:16 27 4
gpt4 key购买 nike

有人能给我指出一个资源,帮助解释 web api(特别是使用 Owin Self Host)如何处理请求取消吗?

这是我观察到的事件顺序:

  • 有人从 chrome 生成了 GET
  • Api Controller (通过某些层)触发异步 SQL 查询
  • 有人点击了 chrome 中的 X 按钮(我不知道 socket 上到底发生了什么)

Web Api 接下来会发生什么??

有一些代码在 Controller 中运行,运行它的线程是否被中止?如果它是一个等待另一个任务的异步 Controller ,该任务是否仍然有一个等待者以防它返回异常?

对于上下文:我确实有一个 async Controller 在等待任务(这是唯一的调用站点),它看起来在某些边缘情况下抛出未观察到的异常。我还没有能够分离或重新生产 :)

我确实找到了一个叫做 HttpResponse.ClientDisconnectedToken 的东西,但不太清楚 Owin Selfhost 是否支持它 + 它是否适合所有用户使用取消。

最佳答案

我通过在自定义中间件中传递 System.OperationCanceledException 来处理这个问题,我之前注册了 WebApi。

public class ExceptionHanldingMiddleware : OwinMiddleware
{
public override async Task Invoke(IOwinContext context)
{
try
{
await Next.Invoke(context);
}
catch (OperationCanceledException) when (context.Request.CallCancelled.IsCancellationRequested)
{
//swallow user-agent cancelling request.
_log.Trace($"client disconnected on request for: {context.Request.Path}.");
}
catch (Exception ex)
{
_log.Error(ex);
context.Response.StatusCode = (int) HttpStatusCode.InternalServerError;
context.Response.ReasonPhrase = "Internal Server Error";
}
}
}

关于c# - OWIN SelfHost Web Api - 请求取消 - 它是如何完成的?线程中止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30109619/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com