关于.net-core:盘点C-90中好用的特性

顶级语句将类和类外面Main函数省略,只留下外围的逻辑代码就是顶级语句! 1.顶级语句1 await System.Threading.Tasks.Task.Delay(1000);System.Console.WriteLine("Hi!");return 0;static class $Program{ static async Task<int> $Main(string[] args) { await System.Threading.Tasks.Task.Delay(1000); System.Console.WriteLine("Hi!"); return 0; }}1.顶级语句2 System.Console.WriteLine("Hi!");return 2;static class $Program{ static int $Main(string[] args) { System.Console.WriteLine("Hi!"); return 2; }}Initstruct Point{ public int X { get; } public int Y { get; } public Point(int x, int y) { this.X = x; this.Y = y; }}init通过容许调用方在结构操作过程中扭转成员,拜访器使不可变对象更具灵活性。 这意味着对象的不可变属性能够参加对象初始值设定项,因而不再须要类型中的所有构造函数样板。 Point类型当初只是: struct Point{ public int X { get; init; } public int Y { get; init; }}而后,使用者能够应用对象初始值设定项来创建对象。 ...

April 22, 2023 · 2 min · jiezi

关于.net-core:Net-Core-开发电商后端API-从0到精通吃透RESTful编程猿自学it-java-python-go-c

download:.Net Core 开发电商后端API 从0到精通吃透RESTful编程猿自学it java python go c自学it666 java python go c教你如何用Java获取IP归属。解释次要步骤: 从Java获取申请IP解决Nginx转发问题通过IP地址获取属性 获取IP地址首先,应用基于Spring Boot的我的项目,在控制器中增加HttpServletRequest申请参数:@RestController公共类IpController {@GetMapping("/ip-address ")公共字符串ipAddress(HttpServletRequest申请){//接管申请}}复制代码通过HttpServletRequest获取IP地址:string IP = request . get header(" x-forward-for ");if (ip == null || ip.length() == 0 ||“未知”。equalsIgnoreCase(ip)) {ip = request.getHeader("代理-客户端-IP ");}if (ip == null || ip.length() == 0 ||“未知”。equalsIgnoreCase(ip)) {IP = request . get header(" WL-代理-客户端-IP ");}if (ip == null || ip.length() == 0 ||“未知”。equalsIgnoreCase(ip)) {IP = request . get header(" HTTP CLIENT IP ");}if (ip == null || ip.length() == 0 ||“未知”。equalsIgnoreCase(ip)) {IP = request . get header(" HTTP X FORWARDED _ FOR ");}if (ip == null || ip.length() == 0 ||“未知”。equalsIgnoreCase(ip)) {IP = request . getremoteaddr();}回归IP;复制代码调用以获取本地环境中的IP,0:0:0:0:0:0:0:1或LAN IP。 ...

September 12, 2022 · 2 min · jiezi

关于.net-core:Net-Core-开发电商后端API-从0到精通吃透RESTful

download:.Net Core 开发电商后端API 从0到精通吃透RESTful一份简洁、纯正的Web前端性能优化清单。每个优化点都蕴含有概念、实操和参考资料。面试、实战两相宜。这是一个大工程。在正式开始之前,先对立下语言,廓清每一部分的目标和要求,避免跑偏。 概念:把官话翻译成能看懂、能记住的人话,原则上易读性 > 专业性 实操:本人操作一遍,不做云玩家;记录外围实现,不便CV 参考资料:信息起源选用一手材料,以便保障信息的完整性、准确性和时效性。除非看一手的了解不了…… 一、网络层面 DNS预解析概念DNS-prefetch 是一种 DNS 预解析技术。它会在申请跨域资源之前,事后解析并进行DNS缓存,以缩小真正申请时DNS解析导致的申请提早。对于关上蕴含有许多第三方连贯的网站,成果显著。实操增加ref属性为“dns-prefetch”的link标签。个别放在在html的head中。<link rel="dns-prefetch" href="//xxx.download.com">复制代码href的值就是要预解析的域名,对应前面要加载的资源或用户有可能关上链接的域名。备注同理,也有“ TCP/IP预连贯”,叫preconnect。参考资料中有残缺的形容。利用浏览器缓存概念浏览器缓存是浏览器寄存在本地磁盘或者内存中的申请后果的备份。当有雷同申请进来时,间接响应本地备份,而无需每次都从原始服务器获取。这样不仅晋升了客户端的响应效率,同时还能缓解服务器的拜访压力。其间,约定何时、如何应用缓存的规定,被称为缓存策略。分为强缓存和协商缓存。整个缓存执行的过程大抵如下:①. 申请发动,浏览器判断本地缓存,如果有且未到期,则命中强缓存。浏览器响应本地备份,状态码为200。控制台Network中size那一项显示disk cache;②. 如果没有缓存或者缓存已过期,则申请原始服务器询问文件是否有变动。服务器依据申请头中的相干字段,判断指标文件新鲜度;③. 如果指标文件没变更,则命中协商缓存,服务器设置新的过期工夫,浏览器响应本地备份,状态码为304;④. 如果指标文件有变动,则服务器响应新文件,状态码为200。浏览器更新本地备份。上述过程有几个关键点如何判断缓存是否过期?浏览器读取缓存的申请后果中响应头的Expires 和Cache-Control,与以后工夫进行比拟。其中,Expires是HTTP 1.0的字段,值是一个是相对工夫。Expires: Tue, 18 Jan 2022 09:53:23 GMT复制代码比拟相对工夫,有一个弊病,它依赖计算机时钟被正确设置。为了解决这个问题,HTTP1.1 新增了Cache-Control字段,它的值是一个是绝对工夫。Cache-Control: max-age=60 //单位是秒复制代码 如何判断文件是否变动?首先能够通过比拟 最初批改工夫。// 缓存后果的 响应头Last-Modified: Mon, 10 Jan 2022 09:06:14 GMT// 新申请的 申请头If-Modified-Since: Mon, 10 Jan 2022 09:06:14 GMT复制代码浏览器取出缓存后果中Last-Modified的值,通过If-Modified-Since上送到服务端。与服务器中指标文件的最初批改工夫做比拟。再者能够通过比拟 Etag。 Etag实体标签是附加到文档上的任意标签(援用字符串)。它们可能蕴含了文档的序列号或版本名,或者是文档内容的校验和及其他指纹信息。当发布者对文档进行批改时,会批改文档的实体标签来阐明这是个新的版本。 从响应头的ETag取值,通过申请头的If-None-Match上送,与服务器指标文件的Etag标签比对。// 缓存的 响应头ETag: "61dbf706-142"// 上送的 申请头If-None-Match: "61dbf706-142"复制代码和下面一样,新增的字段也是为了解决前一种计划的某些缺点: 有些文档可能会被周期性地重写(比方,从一个后盾过程中写入),但理论蕴含的数据经常是一样的。只管内容没有变动,但批改日期会发生变化。有些文档可能被批改了,但所做批改并不重要,不须要让世界范畴内的缓存都重装数据(比方对拼写或正文的批改)。有些服务器无奈精确地断定其页面的最初批改日期。有些服务器提供的文档会在亚秒间隙发生变化(比方,实时监视器),对这些服务器来说,以一秒为粒度的批改日期可能就不够用了。 如果两个版本的字段同时存在,怎么办?出于浏览器兼容方面的思考 ,个别两组字段会被同时应用。他们没有优先级一说,取并集。同时呈现时,只有当两个条件都满足,才会命中相应缓存。 实操缓存是web服务器和浏览器的外围能力,支流的web服务框架 nginx、koa-static等都内置有上述缓存策略的实现。开箱即用,无需额定编程或配置。以Nginx举例。强缓存的配置字段是expires,它承受一个数字,单位是秒。server { listen 8080;location / { root /Users/zhp/demo/cache-koa/static; index index.html;# 留神try_files会导致缓存配置不失效 # try_files $uri $uri/ /index.html; expires 60;}}复制代码理论工作中的确配置一下就好了,但这体现不出什么知识点。为了加深印象,我这用koa简陋的模仿了一下,算是对下面那些知识点的验证。上面是一个极简的动态资源服务,不带缓存的。app.use(async (ctx) => { // 1.依据拜访门路读取指定文件 const content = fs.readFileSync(./static${ctx.path}, "utf-8"); // 2.设置响应 ...

March 22, 2022 · 2 min · jiezi

关于.net-core:LeaRun-Net-CoreJava工作流引擎分离式前端升级Vue

流程作为企业管理系统的外围,在企业的倒退过程中具备重要的作用。通常来说,一个残缺的流程大抵包含有工作流引擎、工作流设计器、流程操作、客户界面、流程监控、表单设计器、表单集成以及与应用程序集成等。 工作流引擎 工作流引擎是流程的外围,次要提供对工作流定义的解析以及流程流转的反对。 工作流定义文件形容了业务的交互逻辑,工作流引擎通过解析此工作流定义文件依照业务的交互逻辑进行业务的流转,工作流引擎通常通过参考某种模型来进行设计,通过调度算法来进行流程的流转(流程的启动、终止、挂起、复原等),通过各种环节调度算法来实现对于环节的流转(环节的合并、分叉、抉择、条件性的抉择等)。 工作流设计器 可视化工作流设计器比拟直观,用户能够通过利落点拽等可视化操作来绘制流程,在流程中的线、节点进行权限和逻辑的配置,在肯定水平上打消开发过程中出错的可能性。 流程操作 流程操作是波及到流程的各种细节,如启动流程、终止流程、挂起流程、直流、分流(单人办理)、并流(多人同时办理)、联审等,象这些流程操作都是可间接基于引擎所提供的环节调度算法来间接反对的,而在理论的需要中,通常须要自在的对于流程进行干预,如取回、回退、跳转、追加、传阅,而这些流程操作对于工作流引擎来说是不合理的,因而必须独自的去实现。 工作流客户界面 客户界面程序是工作流零碎的可视化表现形式,通常应用Web形式进行展示(该页面应用vue),通过提供待办列表、已办列表、执行流程操作、查看流程历史信息等来展示工作流零碎的性能。 流程监控 流程监控通过提供图形化的形式来对流程执行过程进行监控,包含流程运行情况,每个环节所消耗的工夫等等,而通过这些可相应的进行流程的优化,以进步工作效率。 表单设计器 表单设计器为可视化的表单设计工具,用户可通过拖放的形式来绘制业务所需的表单,并可相应的进行表单数据的绑定。 与表单、应用程序的集成 通常,业务流转须要通过表单来表白理论的业务,因而须要与表单进行集成来实现业务意义,与表单的集成通常包含表单数据的主动获取、存储、批改,表单域的权限管制、流程相干数据的保护以及流程环节表单的绑定。 最初,通过与应用程序的集成,来欠缺工作流管理系统的业务意义,次要波及到的是与权限零碎以及组织机构的集成。 流程环节须要相应的绑定不同的执行角色,而流程操作通常须要与权限零碎、组织机构进行关联。 更多功能请搜寻“力软”进行体验。

June 1, 2021 · 1 min · jiezi

关于.net-core:AntDesign-Pro-NET-Core-实现基于JWT的登录认证

很多同学说AgileConfig的UI切实是太丑了。我想想也是的,原本这个我的项目是我本人应用的,一开始甚至连UI都没有,全靠手动在数据库里批改数据。起初加上了UI也是应用了老掉牙的bootstrap3做为根底款式。前台框架也是应用了angularjs,同样是老掉牙的货色。过年期间终于下决心翻新AgileConfig的前端UI。最初抉择的前端UI框架为AntDesign Pro + React。至于为啥选Ant-Design Pro是因为他难看,而且风行,抉择React是因为VUE跟Angular我都略知一二,罗唆趁此机会学一学React为何物,为何这么风行。 登录的认证计划为JWT,其实自己对JWT不太感冒(请看这里《咱们真的须要jwt吗?》),无奈大家都喜爱,那我也只能随大流。 其实基于ant-design pro的界面我曾经翻的差不多了,因为它反对mock数据,所以我一行后盾代码都没批改,曾经把界面快写完了。从当初开始要真正的跟后端代码进行联调了。那么咱们先从登录开始吧。先看看后端asp.net core方面会如何进行批改。 批改ASP.NET Core后端代码 "JwtSetting": { "SecurityKey": "xxxxxxxxxxxx", // 密钥 "Issuer": "agileconfig.admin", // 颁发者 "Audience": "agileconfig.admin", // 接收者 "ExpireSeconds": 20 // 过期工夫 s }在appsettings.json文件增加jwt相干配置。 public class JwtSetting { static JwtSetting() { Instance = new JwtSetting(); Instance.Audience = Global.Config["JwtSetting:Audience"]; Instance.SecurityKey = Global.Config["JwtSetting:SecurityKey"]; Instance.Issuer = Global.Config["JwtSetting:Issuer"]; Instance.ExpireSeconds = int.Parse(Global.Config["JwtSetting:ExpireSeconds"]); } public string SecurityKey { get; set; } public string Issuer { get; set; } public string Audience { get; set; } public int ExpireSeconds { get; set; } public static JwtSetting Instance { get; } }定义一个JwtSetting类,用来读取配置。 ...

March 5, 2021 · 3 min · jiezi

关于.net-core:Prism-框架项目应用篇-导航

在Prism中,应用Navigation来进行页面之间的跳转通常须要一下几步: 创立新页面,并且实现INavigationAware接口应用IRegionManager注册页面应用NavigationParameters封装页面跳转的参数应用IRegionManager.RequestNavigate()跳转到指标页面INavigationAware 接口INavigationAware 有三个接口,IsNavigationTarget、OnNavigatedFrom、OnNavigatedTo 在页面导航的时候会登程,能够按需当时接口办法,代码如下所示: Prism基类页面 示例代码如下所示 public class RegionViewModelBase : ViewModelBase, INavigationAware, IConfirmNavigationRequest { protected IRegionManager RegionManager { get; private set; } public RegionViewModelBase(IRegionManager regionManager) { RegionManager = regionManager; } public virtual void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback) { continuationCallback(true); } public virtual bool IsNavigationTarget(NavigationContext navigationContext) { return true; } public virtual void OnNavigatedFrom(NavigationContext navigationContext) { } public virtual void OnNavigatedTo(NavigationContext navigationContext) { } }被导航的页面能够继承自 <font color=Red> RegionViewModelBase</font>,如下代码展现重写OnNavigatedTo 办法,在OnNavigatedTo中登程相干事件办法。 ...

January 12, 2021 · 1 min · jiezi

关于.net-core:因为它在-4-偏移位置处包含一个对象字段该字段已由一个非对象字段不正确地对齐或重叠

TypeLoadException: 未能从程序集“ECS.GUI.Define, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”中加载类型“ECS.GUI.Define.ArmgAimPos”,因为它在 4 偏移地位处蕴含一个对象字段,该字段已由一个非对象字段不正确地对齐或重叠异样呈现的关键字是:在4偏移地位处蕴含一个对象字段通过查找对象,该对象为共用体 // StructLayout使设计者能够管制类或构造的数据字段的物理布局 // Explicit与FieldOffset一起能够管制每个数据成员的准确地位 [StructLayout(LayoutKind.Explicit)] public struct ArmgAimPos { [FieldOffset(0)] public BayType type; [FieldOffset(4)] public string ContainerID; [FieldOffset(8)] public string JobID; 应用FieldOffset属性实现共用体与强制类型转换应用字段开始的构造中的偏移量初始化 FieldOffsetAttribute 类的新实例。 c# public FieldOffsetAttribute (int offset);参数 offset Int32 从构造开始处到字段开始处的偏移量(以字节为单位)。 可示意的概念为:原理实际上跟C++一样,将一个int[] 型的变量指向与byte[]型变量雷同的内存区域,跟C++中将dat指向char数组的首地址是一样的。同样,这样的构造体性能与C++的共用体是一样的,即一个构造能够作为多种数据类型,而具体是什么类型视状况而定。 批改异样办法:如提醒题目所示:4偏移地位,曾经有一个非对象字段了,所以,将偏移量向后挪动即可解决 // StructLayout使设计者能够管制类或构造的数据字段的物理布局 // Explicit与FieldOffset一起能够管制每个数据成员的准确地位 [StructLayout(LayoutKind.Explicit)] public struct ArmgAimPos { [FieldOffset(0)] public BayType type; [FieldOffset(8)] public string ContainerID; [FieldOffset(16)] public string JobID; [ FieldOffset(<font color=red> 8</font>)] public string ContainerID; 偏移量批改成了8 ,问题修复 ...

January 11, 2021 · 1 min · jiezi

关于.net-core:An-error-occurred-using-the-connection-to-database-on-server

EF Core Migration update-database的时候 An error occurred using the connection to database '' on server '10.28.253.2'问题:在做EF Core Migration的时候,Update-dataBase指令总是报错报错内容为“An error occurred using the connection to database '' on server '10.28.253.2'” 在做数据迁徙的时候,依照惯例操作 Add-Migration init(执行此命令我的项目生成一个目录(Migration))Update-Database init应用的数据库连贯字符串之前是能够查问胜利的,字符串内容如下 "ConnectionStrings": { "Default": "Data Source = 10.28.253.2;Initial Catalog = SignalR;User Id = sa;Password =Ecsgui123;"可是明天拷贝过去之后,死活执行报错,报错内容如下图所示: 本人找谬误的时候,还找错了谬误语句,用了绿色图标中的“Access denied for user”,这句是执行谬误最初一行的提示信息,呈现了一个程序中都不成呈现的“10.28.160.250”这个地址,找的一头乱码 认真查看错误码,发现一开始的报错内容IP是正确的,然而提醒连贯不上,红色框框内容,于是乎将连贯字符串中减少了“Integrated Security=False;”内容,问题到此解决。 "ConnectionStrings": "Default": "Data Source = 10.28.253.2;Initial Catalog = SignalR;User Id = sa;Integrated Security=False;Password =Ecsgui123;"

December 24, 2020 · 1 min · jiezi

关于.net-core:耦合以及相关解耦的思想

耦合是如何产生的?一个类,往往须要跟其余对象打交道,既包含获知其余对象的状态,也包含依赖其余对象的行为,而一旦这样的事件产生时,咱们便称该类依赖于另一个对象。只有两个对象之间存在一方依赖另一方的关系,那么咱们就称这两个对象之间存在耦合。 解除依赖的思维是如何产生的?(1)原始社会里,没有社会分工。须要斧子的人(调用者)仅仅能本人去磨一把斧子(被调用者)。相应的情景为:软件程序里的调用者本人创立被调用者。(2)进入工业社会,工厂呈现。斧子不再由普通人结束,而在工厂里被生产进去,此时须要斧子的人(调用者)找到工厂,购买斧子,毋庸关怀斧子的制作过程。相应软件程序的简略工厂的设计模式。 (3)进入“按需分配”社会,须要斧子的人不须要找到工厂,坐在家里收回一个简略指令:须要斧子。斧子就天然出现在他背后。依赖注入。 从(1)、(2)能够看出,不同点是解放了本人工作,不须要去磨这个斧子了,然而相同点就是这个主导者,还仍然是本人。就说你本人磨斧子还是本人去工厂里去取。这个次要调用者当事人还是本人。 从(2)(3)能够看出,相同点,咱们不须要去磨这个斧子了。不同点,就是主导者变了,斧子曾经不须要咱们去取了,而是咱们想要什么就去要什么。就是控制权曾经扭转了,他曾经不是咱们本人去管制的了。 解耦即让每一个局部都互相独立,一个局部的扭转不会影响其余局部。 我的项目代码松耦合状态 常见的解耦形式DI(Dependency Injection),对依赖的解耦。aop(Aspect Oriented Programming),对关注切面关注点业务逻辑的解耦。Dto(Data Transfer Object),对模型的解耦。ddd畛域驱动设计,对畛域业务模块的解耦。相干基本概念类和对象类:类是一个动态的概念,类自身不携带任何数据。当没有为类创立任何对象时,类自身不存在于内存空间中。对象new实例化的过程:申明援用;应用new关键字创立类的对象并对其初始化;(分配内存空间)将援用指向类的对象。 管制反转 IoC(Inversion of Control)举例场景:比方下面的例子(3)(工厂伐木),从本人须要去工厂买个斧子,而后咱们拿着斧子去上山伐木,变成甲方会给咱们提供斧子,咱们只须要在家里筹备好去就行了,这个时候,咱们对斧头这个控制权,曾经从咱们本人轻轻转化到调用者甲方身上了。这就是管制反转的思维。 比方你把程序里的一个写死的变量改成从配置文件里读取也是一种管制反转(由程序控制反转为由框架管制),你把这个配置改成用户UI界面的一个输出文本框由用户输出也是一种管制反转(由框架管制反转为由用户本人管制)。这些都用了管制反转思维。 什么是管制反转IoC(Inversion of Control)?是一种设计准则,最早由Martin Fowler提出,因为其实践提出工夫和成熟工夫绝对较晚,所以并没有被蕴含在GoF的《设计模式》中。对依赖的管制,从本人,转到本人的调用者上。 依赖注入 DI(Dependency Injection)依赖注入实现了new(做了new实例化这个动作),不是为了省一个new! 依赖注入实现IoC的其中一种设计办法。依赖的对象注入到调用者,你不应该本人创立它,而是应该通过构造函数,由你的调用者给你——容器。 举例场景——自动售货机容器是一个自动售货机,组件是放在外面的在售商品,服务是商品的发售名称。 把商品(我的项目里的具体对象)放入自动售货机(容器)上架的过程叫注册; 注册的时候会给商品贴上标签,标注该商品的名称,这个名称就叫服务; 咱们还能够标注这个商品的适用人群和过期工夫等(生命周期作用域); 把这个包装后的商品放入自动售货机后,它就变成了在售商品(组件)。 当有顾客须要某个商品时,他只有对着售货机报一个商品名(服务名),自动售货机找到对应商品,抛出给客户,这个抛给你的过程,就叫做注入你; 而且这个售货机比拟智能,抛出前还能够先判断商品是不是过期了,该不该抛给你。 依赖注入的步骤注册,创立映射关系蕴含三种生命周期:AddTransient,每次注入或申请时都会创立转瞬即逝的服务;AddScoped,是按范畴创立的,在Web应用程序中,每个Web申请都会创立一个新的独立服务范畴;其中AddTransient和AddScoped每次注册的服务都会在被应用一次之后,被GC销毁掉。AddSingleton,每个DI容器创立一个单例服务,这通常意味着它们在每个应用程序只创立一次,而后用于整个应用程序生命周期,会始终存在内存里。 public void ConfigureServices(IServiceCollection services) { // 注册 services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); }创立,new实例化 public class ValuesController : ControllerBase { public IHttpContextAccessor HttpContextAccessor { get; set; } // 创立,这个时候去new实例 public ValuesController(IHttpContextAccessor accessor) { _accessor = accessor; }}调用/应用 public ActionResult<IEnumerable<string>> Get() { //调用 var name = _accessor.HttpContext.User.Identity.Name; }援用/参考:https://www.bilibili.com/vide... ...

November 26, 2020 · 1 min · jiezi

关于.net-core:NET-Core-3时代已经到来了你还不会创建NET-Core-3应用

点击获取工具>>本指南将介绍如何创立.NET Core 3应用程序、如何将其配置为应用DevExpress WPF控件,以及如何向应用程序自身增加DevExpress控件。(在本教程中,咱们将向您展现如何将Spreadsheet控件增加到.NET Core 3我的项目中) 先决条件.NET Core 3 SDKVisual Studio 2019 version 16.3 (装置.NET桌面开发工作负载)分步教程关上Visual Studio 2019 v16.3,并创立一个新的WPF应用程序(.NET Core)。 增加DevExpress NuGet软件包。在此文章中,咱们形容如何通过DevExpress NuGet Feed获取DevExpress WPF控件。入门指南形容如何从本地源中将DevExpress WPF控件用于.NET Core。 跳转到Tools | NuGet Package Manager | Manage NuGet Packages for Solution 关上"Settings"... ...并增加具备以下属性的新NuGet feed: Name: DevExpress Source: https://nuget.devexpress.com/{your feed authorization key}/api 抉择您刚刚增加的DevExpress软件包源。 在"Browse"标签中,搜寻'WindowsDesktop.Wpf',并将以下两个软件包装置到以后我的项目中。 DevExpress.WindowsDesktop.WpfDevExpress.WindowsDesktop.Wpf.Themes.Office2019Colorful浏览并承受许可协定。 构建解决方案,这将迫使我的项目解决所有NuGet包依赖项。Visual Studio会将可用的控件加载到其工具箱中。 利用应用程序主题在应用程序启动时,将ApplicationThemeHelper.ApplicationThemeName 属性设置为所需的主题名称。 `public partial class App : Application {protected override void OnStartup(StartupEventArgs e) {DevExpress.Xpf.Core.ApplicationThemeHelper.ApplicationThemeName = DevExpress.Xpf.Core.Theme.Office2019ColorfulName;base.OnStartup(e);}}` ...

October 26, 2020 · 1 min · jiezi

关于.net-core:Net-Core高并发业务加个锁

高并发业务,应防止因为并发产生的一些异样问题,须要加把锁,利用Redis的锁 10秒超时,抛出超时异样 using (var redisLocker = new RedisLocker(_appApiRedisConfig, $"SaveStudyStatus:{accountId}", 10000, 10000)) { if (!redisLocker.Success) { throw new TimeoutException(); } }

September 27, 2020 · 1 min · jiezi