• HotReload的试用


      .net v6.0.0-preview.3的HotReload我是极喜欢的,因为之前有这样的需求——状态不丢,上下文不丢。

      为了验证,安装完.net 6 preview 3后,新建一个webapi项目,写了如下简单代码:

    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Logging;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    
    namespace HotRealoadDemo.Controllers
    {
        [ApiController]
        [Route("[controller]")]
        public class HomeController : ControllerBase
        {
            private readonly ILogger<HomeController> _logger;
            private static string _dateTimeStr;
            public HomeController(ILogger<HomeController> logger)
            {
                if (HomeController._dateTimeStr== null)
                {
                    _dateTimeStr=DateTime.Now.ToString();
                }
                _logger = logger;
            }
    
            [HttpGet("/status")]
            public string GetStastus()
            {
                _logger.LogInformation("获取时间列表");
                return "时间是:"+_dateTimeStr;
            }
    
            [HttpGet("/sleep")]
            public string Sleep(int i)
            {
                _logger.LogInformation("延时");
                if (i == 1)
                {
                    System.Threading.Thread.Sleep(10000);
                }  
                return "延时结果";
            }
        }
    }

    在项目目录,用dotnet watch运行项目。

    状态不丢:

      这里的状态我是全局的,放了一个静态的字段_dateTimeStr,当第一次调用/state时,该字段初赋值,之后每次调用都不变,用swagger可以验证。这时,我们修改HomeController的29行代码,把 “时间是”变成“输出时间是”,保存,再次调用swagger的/state,会发现,原来的时间没有变,但输出文本已变成“输出时间是”了,这说明代码起作用了,但_dateTimeStr这个内部状态值没有丢,进程好像没有重启一样。

     

    上下文不丢:

      这里用/sleep进行试验,当i=1里,要sleep10s,我会先请求一个/sleep?i=1,这里浏览器在等行,这里把HoemController的40行代码改成“延时结果GSW”,这时可以在swagger上调用/sleep,i传非1值 ,结果会是改变后的“延时结果GSW”,如果上一次的浏览器等待后返回了,你会看到是“延时结果”,并没有GSW,这是因为在这个请求调起时,还没有加上GSW,这个是可以理解的。其实这个功能我在k8s上试过,虽然pod可以优雅停止,但它是固定时间后停止,即使请求没有完成,也会停止的,相对来说没有HotReload更准确。

      验证完成,还是相对满意的,因为HotReload是最近才加入的功能,还很不完善,比如这个只能在项目源码文件夹里用dotnet watch启动才行,publish后是不可以的,相信不远的将来,.net团队会更加完善这个功能,给出一个让大家满意的结果。

      还有另一方面,不要希望这个功能能处理所有功能变化的HotReload,比如你把状态变量名改了,原来的状态肯定是不会存在的,所以良好的设计,加上HotRealod的功能,才能让我们的对客户提供的api服务无微不至,无时无刻。

     

      想要更快更方便的了解相关知识,可以关注微信公众号 
     

     

  • 相关阅读:
    MySQL InnoDB 锁
    MySQL InnoDB 事务
    MySQL 执行计划详解
    php获取当前url地址的方法小结
    数据库联表统计查询 Group by & INNER JOIN
    大文件分片上传,断点续传,秒传 实现
    如何让 height:100%; 起作用
    移动前端头部标签(HTML5 head meta)
    Emoji表情符号在MySQL数据库中的存储
    HTML页面直接显示json 结构
  • 原文地址:https://www.cnblogs.com/axzxs2001/p/15863009.html
Copyright © 2020-2023  润新知