AspNetCore应用注意哪些点

技术AspNetCore应用注意哪些点今天就跟大家聊聊有关AspNetCore应用注意哪些点,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。背景已经有很多文章记录了

今天,我将和大家谈谈关于AspNetCore应用程序应该注意的问题。可能很多人不太了解。为了让大家更好的了解,边肖为大家总结了以下内容。希望你能从这篇文章中有所收获。

背景

许多文章记录了异步编程在web程序中的优势以及。Net异步编程。异步编程虽然不能解决数据库查询的瓶颈,但可以通过使用线程切换来最灵活地利用工作线程,提高Web服务的响应能力。

这里我们要说的是利用异步编程中的取消机制来缓解数据库的查询瓶颈。开发人员只需要在MVC/WebAPI中查询方法。

取消CancellationToken并及时取消异步任务,这将大大提高应用程序的响应能力。

头脑风暴

想象一下,要求一个网站页面,上面闪烁着试图绽放的菊花(加载),最后你受不了了:

F5刷新

翻到其他页面。

点击浏览器“停止”按钮。

对于Web服务器,如果用户快速刷新五次,服务器将被迫接受五次的工作负载。这是因为即使用户刷新浏览器(或点击停止按钮)并取消了原来的浏览器请求,Web服务器也不在乎,而是仍然一步一步处理请求进入HTTP管道(MVC/WebAPI中的默认行为, 场景类似)

在异步编程中,它可以向任务发送cancel信号,以停止web服务器的后端查询行为。英寸NET,这是使用CancellationToken完成的:

取消令牌的实例被传递给异步任务。

异步任务监视令牌以查看请求是否已被取消。

如果请求被取消,正在进行的操作应该停止。中的大多数异步方法。NET将具有接受取消令牌的重载。

小费

本文中的取消请求指的是耗时的服务器读取请求(返回数据但不修改数据的查询),取消修改数据的请求可能不是用户的好选择:

您真的想因为用户导航到应用程序的另一个页面而取消保存吗?也许,但也许不是。

复杂性增加,因为数据库服务器可能需要回滚事务,这是一项昂贵的操作。

AspNetCore实践

访问MyReallySlowReport页面,等待5s,最后他们放弃了其他页面:

AspNetCore应用注意哪些点

所有正在进行的请求都将被取消。

P1 监测CancellationToken令牌

MVC/WebAPI可以接收取消请求的信号。开发人员只需要在控制器动作中添加CancellationToken参数,并在后续动作中监控取消信号。

publicatasynctascadictionresultmyrealyslowreport(cancelationtoken cancelationtoken)

{

ListReportItemitems

使用(applicationdbcontext context=new applicationdbcontext())

{

items=awaitcontext。铼

portItems.ToListAsync(cancellationToken);
    }
    return View(items);
}

上述EF的调用api支持取消异步操作,故很容易取消SQL的查询行为;对于自定义的长耗时查询行为,可以使用CancellationToken的原生触发用法:

public async Task<ActionResult> MyReallySlowReport(CancellationToken cancellationToken)
{
    List<ReportItem> items;
    using (ApplicationDbContext context = new ApplicationDbContext())
    {
        items = await context.ReportItems.ToListAsync(cancellationToken);
    }

    foreach (var item in items)
    {
        cancellationToken.ThrowIfCancellationRequested();
            // slow non-cancellable work
            Thread.Sleep(1000);
    }
    return View(items);
}

P2 处理取消异步操作向上抛出的异常处

Web服务器触发取消信号,一般会向上会抛出OperationCanceledException或TaskCancellationException,所以为了记录这种非常规异常,建议采用独立的ExceptionFilter。

public class OperationCancelledExceptionFilter : ExceptionFilterAttribute
{
    private readonly ILogger _logger;

    public OperationCancelledExceptionFilter(ILoggerFactory loggerFactory)
    {
        _logger = loggerFactory.CreateLogger<OperationCancelledExceptionFilter>();
    }
    public override void OnException(ExceptionContext context)
    {
        if(context.Exception is OperationCanceledException)
        {
            _logger.LogInformation("Request was cancelled");
            context.ExceptionHandled = true;
            context.Result = new StatusCodeResult(400);
        }
    }
}

P3 想要得到CTO的大拇指,继续思考吧

以上是后端程序员利用取消机制缓解异步查询瓶颈的操作,从web应用全流程角度思考,这个优化还能提升吗? ????

> 以上是传统的网页请求场景,在取消请求时,浏览器帮助我们发起了Cancellation信号。

> 想想日益常见的SPA程序(单页面程序),绝大部分页面请求都是Ajax请求,你点击应用的另外一个“页面”(JS代码维护页面导航),浏览器不会自动取消请求。所以在SPA应用中要前端自己发出取消请求的信号:

var xhr = $.get("/api/myslowreport", function(data){
  //show the data
});

//If the user navigates away from this page
xhr.abort()

前后端程序猿通力配合,应用的吞吐量和响应能力极大提升,CTO要给各位加薪了。

看完上述内容,你们对AspNetCore应用注意哪些点有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/102061.html

(1)

相关推荐

  • 抖音刷人气,抖音直播刷人气?

    技术抖音刷人气,抖音直播刷人气?推荐代刷网专业团队刷抖音播放量,24小时秒刷,可以打开网址,去少量刷一点试试,不懂的也可以加他们微信信誉很好,我的抖音播放量就是在代刷平台里刷的。
    抖音大伙都知道,是目前最火爆的短视频AP

    测评 2021年10月20日
  • Nginx常用功能有哪些

    技术Nginx常用功能有哪些这篇文章主要介绍“Nginx常用功能有哪些”,在日常操作中,相信很多人在Nginx常用功能有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Nginx常用功能

    攻略 2021年12月10日
  • hadoop命令有哪些

    技术hadoop命令有哪些这篇文章主要为大家展示了“hadoop命令有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“hadoop命令有哪些”这篇文章吧。查看:hadoop

    攻略 2021年11月20日
  • sketch主要是做什么的(sketch 主要是做什么)

    技术sketch的优势是什么今天就跟大家聊聊有关sketch的优势是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。现在UI设计师不仅仅需要掌握基础的设计软件P

    攻略 2021年12月24日
  • 苹果日历怎么添加生日,正点日历怎么添加好友生日

    技术苹果日历怎么添加生日,正点日历怎么添加好友生日在正点日历app中,不仅包含有我们日常使用的阳历苹果日历怎么添加生日、农历日历查询功能,并且我们还能够设置每位重要好友的生日,对于一些新手用户来说,刚刚使用正点日历却不知

    生活 2021年10月20日
  • CentOS 7.3上SQL Server vNext CTP 1.2如何安装

    技术CentOS 7.3上SQL Server vNext CTP 1.2如何安装这篇文章给大家分享的是有关CentOS 7.3上SQL Server vNext CTP 1.2如何安装的内容。小编觉得挺实用的,因此分享

    攻略 2021年11月15日