.NET如何快速实现异步轮询 Web API

Web API 在处理一些耗时的请求时,往往不能让客户端一直等待响应,否则会造成连接超时或资源浪费的问题。

为了解决这个问题,一种常见的设计模式是“异步轮询模式”。这种模式的基本思路是:

阅读剩余部分

基于 Newtonsoft Json 实现 console log formatter

Intro

.NET 从 5.0 开始支持了 console formatter,首次支持了 json console, 自定义 console 日志也变得可能,可以参考之前的介绍 .net 5.0 中的 JsonConsole

然而 .NET 里的 json console 里的 json 编码要求是比较严格的,有一些特殊符号和特殊编码会有点问题,我们需要使用 JavaScriptEncoder.UnsafeRelaxedJsonEscaping 才能正常显式,于是想着直接基于 newtonsoft json 来实现一个 console log formatter

阅读剩余部分

使用 xunit DependencyInjection 对 Minimal API 进行测试

Intro

ASP.NET Core 从 .NET 6 开始支持了 Minimal API, 对于 Minimal API 的的集成测试,之前一直并没有太多的关注,之前看到了这个 issue

https://github.com/pengweiqhca/Xunit.DependencyInjection/issues/86,大体上想使用 xunit DependencyInjection 来实现对 Minimal API 的集成测试,起初使用 WebApplicationFactory 写了一个示例,但是后来发现并不是人家想要的,提 issue 的同学希望在 test case 中的依赖注入和实际 web 是一个 DI,前两天后来研究了一下 WebApplicationFactory 是如何实现支持 Minimal API 的,最后在 xunit dependency injection 中提供了支持

阅读剩余部分

C#如何保证 Activity 不为 null

Intro

之前写过一篇 “基于 Activity 来实现后台服务的日志追踪”,我们的服务里基本也是这样做的,前段时间发现有时间日志里会没有 traceId, 即使有 parentId 也可能没有 traceId, 后来发现这些没有 traceId 的数据基本都是 parentId 没有被采样的,而在测试环境之前我们设置的是始终采样所以在测试环境之前没有这个问题,起初的想法是解决当有 parentId 的时候,保证创建的 activity 不为 null 至于没有 parentId 也没有被采样的就不关心了,但是后面又想了一下觉得即使没有被采样,activity 也不应该为 null 我们不仅仅依赖它做 tracing 还依赖它做 logging,tracing 可以没有,但是 logging 要有,不然一些日志就没有办法串联起来了

阅读剩余部分

.NET获取应用退出 CancellationToken

Intro

当前我们的应用原来越多的使用异步方法,而异步方法通常会有一个 CancellationToken 的参数以及时取消我们的异步操作,那我们如何获取一个应用退出的 CancellationToken 呢,我们只需要使用一个 CancellationTokenSource 在应用退出的时候将其 Cancel 即可

阅读剩余部分