代码拉取完成,页面将自动刷新
发布 Furion
和 Furion.Tools
和 Furion.Xunit
v4.6.9
版本
包含以下功能更新:
数组和集合
类型的 url
参数 4.6.9 #I5XIQ4:远程请求中使用 IEnumerable 相关类型的参数出现问题
Tenant
实体且包含 TenantId
属性且没有继承 EntityBase/Entity
基类出现 The entity type 'Tenant' requires a primary key to be defined
4.6.9 #I4UM3E:EFCore,自定义Entity包含属性:租户Id【TenantId】,使用EFCore出现异常
SqlSugarCore
拓展和脚手架至 5.1.3.28
版本v4.6.9
版本文档samples
依赖至 v4.6.9
版本Furion
案例同步到 v4.6.9
版本Gitee
和 Github
发布 Release-v4.6.9
版本1. Worker Service
实现 串行
执行方式
默认情况下,定时任务都是采用 并行
的方式,也就是不会等待上一次任务完成,如果需要等待上一次任务完成,可以修改为 串行
方式:
using Furion.TimeCrontab;
namespace WorkerService;
public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;
private readonly Crontab _crontab;
private bool _isLock = false;
public Worker(ILogger<Worker> logger)
{
_logger = logger;
_crontab = Crontab.Parse("* * * * * *", CronStringFormat.WithSeconds);
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
if (_isLock) goto next;
_isLock = true;
var taskFactory = new TaskFactory(System.Threading.Tasks.TaskScheduler.Current);
var task = await taskFactory.StartNew(async () =>
{
// 模拟耗时操作
await Task.Delay(2000);
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
await Task.CompletedTask;
}, stoppingToken);
// 等待任务完成
await task.ContinueWith(task => _isLock = false);
next:
await Task.Delay(_crontab.GetSleepMilliseconds(DateTime.UtcNow), stoppingToken);
}
}
}
Furion
v4.6.9 版本发布,修正远程请求和多租户模块v4.6.9
版本细节:#I5XKW4:📝 发布 Furion v4.6.9 版本 2022.10.25
v4.6.8
版本细节:#I5X2Q0:📝 发布 Furion v4.6.8 版本 2022.10.22
v4.6.7
版本细节:#I5WQPP:📝 发布 Furion v4.6.7 版本 2022.10.20
v4.6.6
版本细节:#I5WOIV:📝 发布 Furion v4.6.6 版本 2022.10.20
v4.6.5
版本细节:#I5VPD1:📝 发布 Furion v4.6.5 版本 2022.10.14
v4.6.4
版本细节:#I5VIAQ:📝 发布 Furion v4.6.4 版本 2022.10.13
v4.6.3
版本细节:#I5V99T:📝 发布 Furion v4.6.3 版本 2022.10.12
v4.6.2
版本细节:#I5V6UE:📝 发布 Furion v4.6.2 版本 2022.10.12
v4.6.1
版本细节:#I5UYQW:📝 发布 Furion v4.6.1 版本 2022.10.11
v4.6.0
版本细节:#I5UQZ7:📝 发布 Furion v4.6.0 版本 2022.10.10
新特性
LoggingMonitor
支持 FileResult
类型监听 4.6.0 bf9c0b1
LogMessage
结构 UseUtcTimestamp
字段,解释日志记录时间格式是 UTC
还是 LOCAL
时间 4.6.1 aab0371
LoggingMonitor
支持序列化忽略指定属性名或属性类型 4.6.1 81c6343
long
序列化丢精度的 JsonConvert
内置转换器,.AddLongTypeConverters()
4.6.5 #I5VJHC:粘土对象 todictionary 方法 返回前端的 long类型精度丢失 aded58d
app.EnableBuffering()
拓展,解决 Request.Body
不能重复读问题 4.6.5 aded58d
LoggingMonitor
自动解析 JWT
时间戳为时间格式 4.6.8 9e31b0b
突破性变化
.NET 6.0.10
和 .NET 7 RC2
4.6.2 6bb2fad
Microsoft.AspNetCore.Mvc.NewtonsoftJson
拓展,原因是太多人使用了 4.6.5 aded58d
"some log".SetCategory(name)
拓展方法DateOnlyJsonConverter
和 DateOnlyOffsetJsonConverter
处理foreach
改为 Parallel.ForEach
,吞吐量提升近 4 倍 4.6.4 7384c9c
.AddDateFormatString()
.AddDateTimeTypeConverters()
4.6.5 aded58d
.SetTimeout
和 [Timeout]
配置方法,采用全局统一配置问题修复
4.5.9+
版本新增的 IncludeScopes
配置导致日志上下文失效 4.6.0 4a76841
sql
共用 DbParameters
出现冲突问题 4.6.0 #I5UO2H:连续执行两个带parameters的查询会报错
.CreateLogger
创建的日志对象无法应用上下文问题 4.6.0 ec4838c
Worker Serivce
中进行构造函数注入,原因是注册为 Scope
范围作用域 4.6.3 974f835
SQL Server
不支持 TLS 1.2
协议问题 4.6.3 974f835
.ToDictionary()
拓展不支持 JObject
类型问题 4.6.5 #I5VJHC:粘土对象 todictionary 方法 返回前端的 long类型精度丢失 a11bf8d
LoggingMonitor
处理 long
类型丢精度问题 4.6.5 #I5VJHC:粘土对象 todictionary 方法 返回前端的 long类型精度丢失 aded58d
WebAPI
在 class
类型上贴 [ApiDescriptionSettings(false)]
导致接口 404
问题 4.6.7 #I5WQ18:[ApiDescriptionSettings(false)] 对动作方法有效,控制器直接就不能访问了
GC
来不及回收导致内存和 CPU
爆掉问题 4.6.8 dbc7935
JWT
模块自动刷新 Token
达到临界值时导致自动刷新失败,并返回错误的 401
状态码 4.6.8 #I5WXHZ:自动刷新令牌,当403正好是刷新令牌时间,返回的是401
vue/react/angular
客户端工具库错误处理 Token
问题 4.6.8 #I5WXHZ:自动刷新令牌,当403正好是刷新令牌时间,返回的是401
数组和集合
类型的 url
参数 4.6.9 #I5XIQ4:远程请求中使用 IEnumerable 相关类型的参数出现问题
Tenant
实体且包含 TenantId
属性且没有继承 EntityBase/Entity
基类出现 The entity type 'Tenant' requires a primary key to be defined
4.6.9 #I4UM3E:EFCore,自定义Entity包含属性:租户Id【TenantId】,使用EFCore出现异常
其他更改
文档
JSON
序列化处理 long
类型说明文档JSON
反序列化 DateTimeOffset
类型个别格式出错问题解决方案文档Worker Service
实现 串行
操作文档JSON
序列化文档、远程请求文档、安全授权文档、生成前端请求代理文档此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
登录 后才可以发表评论