Anduin Xue
Anduin Xue

Anduin's Tech Blog

All Posts in 2020.10


Fire and forget in ASP.NET Core with dependency alive

在ASP.NET Core中实现fire and forget模式时,开发者常通过Task.Run启动异步任务但可能忽略依赖项生命周期管理。当控制器触发耗时任务后自身即被释放,导致注入的依赖可能提前销毁从而中断任务执行。文章揭示了直接在控制器中调用Task.Run的潜在风险,提出通过单例服务CannonService解决依赖存活问题的创新方案。该服务利用IServiceScopeFactory动态创建作用域,确保任务执行期间依赖项始终有效。通过将耗时操作迁移至单例服务中执行,既避免阻塞主线程又能保持依赖存活,同时引入异常处理机制增强任务健壮性。这种设计模式突破了传统依赖注入的生命周期限制,为长时异步任务提供了优雅的解决方案。文章最后抛出值得深思的问题:当任务依赖多个作用域服务时,如何平衡资源占用与任务可靠性?当系统负载剧增时,这种基于Task.Run的调度策略是否存在潜在瓶颈?或许我们该重新审视fire and forget在现代云原生架构中的最佳实践。--Qwen3

ASP.NET Core C# Async Fire and forget dependency injection singleton service

How to serialize JSON object in C# without Newtonsoft Json

在C#开发中遇到JSON序列化需求却受限于Newtonsoft.Json的版本冲突问题时如何破局?本文提出了一种纯C#解决方案通过DataContractJsonSerializer实现自定义JSON转换器。开发者只需将MyJsonConverter类集成到项目中即可获得与Newtonsoft.Json相似的序列化能力该方法通过MemoryStream实现内存级数据流转无需依赖第三方库即可完成复杂对象的递归序列化。示例中的书籍关联结构验证了其处理嵌套对象的能力当对象的Related字段包含子对象时转换器能自动处理null值并保持结构完整性。这种轻量级方案不仅解决了依赖冲突问题还为资源受限场景提供了替代方案但同时也引发更多思考:当面对包含循环引用的对象时这种转换机制会如何表现?在性能对比中纯C#方案与Newtonsoft.Json的效率差异有多大?当需要处理包含动态类型的复杂数据结构时是否需要对转换器进行扩展?这些问题的答案或许能帮助开发者在不同场景下做出更明智的技术选型。--Qwen3

C# JSON .NET Newtonsoft.Json JSON handling Custom JSON solution