Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Net core 2.2:HttpClient超时时OperationCanceledException代替TaskCanceledException_C#_Asp.net Core_Dotnet Httpclient_Asp.net Core 2.2 - Fatal编程技术网

C# Net core 2.2:HttpClient超时时OperationCanceledException代替TaskCanceledException

C# Net core 2.2:HttpClient超时时OperationCanceledException代替TaskCanceledException,c#,asp.net-core,dotnet-httpclient,asp.net-core-2.2,C#,Asp.net Core,Dotnet Httpclient,Asp.net Core 2.2,在我们的项目中,我们有一个HttpClient,用于严格超时的传出连接,之前,我像所有教程建议的那样处理超时情况:通过捕获TaskCanceledException。它成功了。但是从最近开始(不能说确切的时间,但大约一个月),超时开始导致操作取消异常 System.OperationCanceledException: The operation was canceled. at System.Net.Http.HttpClient.HandleFinishSendAsyncError(E

在我们的项目中,我们有一个
HttpClient
,用于严格超时的传出连接,之前,我像所有教程建议的那样处理超时情况:通过捕获
TaskCanceledException
。它成功了。但是从最近开始(不能说确切的时间,但大约一个月),超时开始导致
操作取消异常

System.OperationCanceledException: The operation was canceled.
   at System.Net.Http.HttpClient.HandleFinishSendAsyncError(Exception e, CancellationTokenSource cts)
   at System.Net.Http.HttpClient.FinishSendAsyncBuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
   <buisness-logic traceback>
   at Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
   at System.Threading.Tasks.ValueTask`1.get_Result()
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeActionMethodAsync()
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeNextActionFilterAsync()
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context)
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync()
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter()
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context)
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync()
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync()
   at Microsoft.AspNetCore.Routing.EndpointMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext)
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context)
   at NSwag.AspNetCore.Middlewares.SwaggerUiIndexMiddleware`1.Invoke(HttpContext context)
   at NSwag.AspNetCore.Middlewares.RedirectToIndexMiddleware.Invoke(HttpContext context)
   at NSwag.AspNetCore.Middlewares.SwaggerDocumentMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Server.IIS.Core.IISHttpContextOfT`1.ProcessRequestAsync()
System.OperationCanceledException:操作已取消。
位于System.Net.Http.HttpClient.HandleFinishSendAsyncError(异常e,CancellationTokenSource cts)
位于System.Net.Http.HttpClient.FinishSendAsyncBuffered(任务'1 sendTask,HttpRequestMessage请求,取消令牌源cts,布尔处理)
位于Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor.TaskOfActionResultExecutor.Execute(IActionResultTypeMapper映射器、ObjectMethodExecutor执行器、对象控制器、对象[]参数)
在System.Threading.Tasks.ValueTask`1.get_Result()处
在Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeActionMethodAsync()中
在Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeNextActionFilterAsync()上
位于Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext上下文)
位于Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(状态和下一步、范围和范围、对象和状态、布尔值和isCompleted)
在Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync()中
在Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter()上
位于Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext)
在Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(State&Next、Scope&Scope、Object&State、Boolean&isCompleted)
在Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync()中
在Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync()上
位于Microsoft.AspNetCore.Routing.EndpointMiddleware.Invoke(HttpContext HttpContext)
位于Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware.Invoke(HttpContext HttpContext)
在Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext HttpContext)中
---来自引发异常的上一个位置的堆栈结束跟踪---
在Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext上下文)中
位于Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext上下文)
位于NSwag.AspNetCore.middleware.SwaggerUiIndexMiddleware`1.Invoke(HttpContext上下文)
位于NSwag.AspNetCore.middleware.RedirectToIndexMiddleware.Invoke(HttpContext上下文)
位于NSwag.AspNetCore.middleware.SwaggerDocumentMiddleware.Invoke(HttpContext上下文)
位于Microsoft.AspNetCore.Server.IIS.Core.iishttpcontextroft`1.ProcessRequestAsync()
将所有捕获更改为
OperationCanceledException
不是什么大问题,但我想知道为什么?有人知道为什么
HttpClient
可以切换异常吗?我使用VS2019 16.4.3和IIS express在本地部署应用程序。NETCore2.2我找到了

基本上,在短时间超时的情况下,存在可能导致OCE发生的竞争条件。它的意思是“我们不知道到底发生了什么,我们也不在乎,所以你不应该太在意。”。总之,不管怎样,捕获
OperationCanceledException
几乎总是更好的,因为这也包括
TaskCanceledException
(派生类),而且一些内部代码重新排列/优化或时间更改很容易在以前生成TCE时开始生成OCE。