.NET 中的 gRPC 请求依赖于必须关闭和处理的通道:
using var channel = Grpc.Net.Client.GrpcChannel.ForAddress("path to service");
//...do stuff...
await channel.ShutdownAsync();
我使用 .NET 依赖注入服务将它包装起来IServiceCollection
,这应该是......
- 每个方法 - 在每个方法调用中创建和处置通道。
AddTransient
- 每次请求我的服务时都会创建一个新频道,但仅在需要时提供。AddScoped
- 每个请求都有一个新通道,但在请求完成之前保持通道打开。AddSingleton
- 应用程序的一个新频道。
我认为 AddSingleton
已经出局了,因为我不确定如何同时GrpcChannel
处理大量并行请求,并且我想传递CancellationToken
当前请求。
这在AddScoped
vsAddTransient
与 per-method 之间进行了选择。如果没有大量的测试(并且绊倒了所有的陷阱),我不确定这里的最佳实践是什么(我是 gRPC 的新手)。我应该尽快关闭频道,还是保持打开并在通话之间共享?