温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

.NET中如何使用 HotReload

发布时间:2021-08-03 14:59:21 来源:亿速云 阅读:124 作者:Leah 栏目:编程语言

今天就跟大家聊聊有关.NET中如何使用 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服务无微不至,无时无刻。

看完上述内容,你们对.NET中如何使用 HotReload有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI