当前位置:首页 > 技术积累 > 正文内容

ASP.NET MVC WebApi控制器方法使用async假死超时问题

竹林之风1年前 (2021-05-07)技术积累808

        在一个ASP.NET MVC WebApi控制器方法中使用async标记为异步方法后,有时会假死超时。根本原因是同步方法和异步方法混合造成的死锁问题。

using System;

namespace Demo
{
    public class DemoController : ApiController
    {
        public async Task<string> DemoAction()
        {
            await Task.Delay(1000);
            return "OK";
        }
    }
}

        因为async、await具有传染性,使用了它们则在方法上层都要依次传递。所以还需要在Filter、DelegatingHandler等中也使用async、await。

using System;

namespace Demo.Filters
{
    public class BaseFilterAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
        }

        public override async void OnActionExecuting(ActionExecutingContext filterContext)
        {
            await ……
        }

        public override void OnResultExecuted(ResultExecutedContext filterContext)
        {
        }

        public override void OnResultExecuting(ResultExecutingContext filterContext)
        {
            
        }   
    }
}
using System;

namespace Demo.Filters
{
    public class CommonDelegatingHandler : DelegatingHandler
    {
        protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            HttpResponseMessage response = await base.SendAsync(request, cancellationToken);          
            return response;
        }
    }
}


扫描二维码推送至手机访问。

版权声明:本文由久爱编程网发布,如需转载请注明出处。

本文链接:http://www.9icode.com/index.php/post/356.html

分享给朋友:

相关文章

通用基础表逻辑设计(一)——配置、枚举和类别

通用基础表逻辑设计(一)——配置、枚举和类别

一、配置表        一个系统中往往有很多需要可自定义的参数,比如网站名称、联系地址等基础参数以及各种系统运行参数等等,这个时候就需要单独一个参数配置表来保...

ASP.NET实现HTTP长轮询(二)——一般处理程序ashx

ASP.NET实现HTTP长轮询(二)——一般处理程序ashx

        本文主要描述如何在ASP.NET一般处理程序中实现长轮询:(1)实现IAsyncResult:using System; using System.Threadi...

ASP.NET中报“无法在已发送HTTP标头之后进行重定向”异常问题解决

ASP.NET中报“无法在已发送HTTP标头之后进行重定向”异常问题解决

        ASP.NET中报“无法在已发送HTTP标头之后进行重定向”异常时,其中一个原因是:在已经重定向后又重定向。在ASP.NET中实现重定向有以下几...

ASP.NET中报“无法在已发送HTTP标头之后设置状态”异常问题解决

ASP.NET中报“无法在已发送HTTP标头之后设置状态”异常问题解决

        ASP.NET中报“无法在已发送HTTP标头之后设置状态”异常,是因为设置Response的StatusCode之前,程序已设置响应标头。可从以...

ASP.NET网站自定义错误处理及其它安全相关

ASP.NET网站自定义错误处理及其它安全相关

        ASP.NET网站在运行过程中总是有可能报错,例如404等HTTP错误、500等程序异常。在IIS托管并报错的情况下,网站的默认行为依次是:(1).NET运行时接收并处理的部分显示.N...

从被扫描记录看网站安全应该注意的一些细节

从被扫描记录看网站安全应该注意的一些细节

1、尽可能地隐藏服务器真实IP,减少攻击目标。例如使用负载均衡、网关等作为门户,由负载均衡或网关转发到后端服务器。2、服务器必须开放的服务(除HTTP、HTTPS等为公众开放的服务外),尽可能改为其它较大的不常用的端口号,这样攻击者需要扫描...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。