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

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

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

        在一个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;
        }
    }
}



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

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

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

分享给朋友:

相关文章

SVN源码版本控制目录方案

SVN源码版本控制目录方案

        SVN的目录规划:(1)trunk:主干目录,用于存放当前正在开发和维护中的源码版本,这是一个进行日常开发和维护的主要目录;(2)branche...

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

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

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

ASP.NET Core网站报“An assembly specified in the application dependencies manifest was not found”异常解决

ASP.NET Core网站报“An assembly specified in the application dependencies manifest was not found”异常解决

        ASP.NET Core网站报“An assembly specified in the application dependencies ma...

使用Nginx实现简单密码认证

使用Nginx实现简单密码认证

        假设一个网站没有实现登录认证功能,我们要临时增加一个简单的账号密码认证,可以使用Nginx来实现该功能。  server&n...

实现内网穿透的几种方式

实现内网穿透的几种方式

        大部分普通电脑对外都没有固定的公网IP、或处于NAT网络内,要从局域网外直接访问该电脑,需要借助第三方工具。一、有一台公网固定IP服务器的情况1、Nginx&nbs...

发表评论

访客

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