我正在用 C# 编写一个 gRpc 服务器,如果服务器因任何原因关闭,我想添加自动恢复/重试实现。经过研究,我遇到了拦截器并感到兴奋,但看起来它只支持 Go。我找不到 gRpc C# 的任何类似内容。
如何在 gRpc CSharp 中处理自动恢复,或者是否有任何类似的概念(例如我们可以使用拦截器)?
编辑-在 GRPC c# 中,有没有办法检查服务器是否正在运行或可用?
我有几种方法可以向数据库报告一些数据。我们希望异步调用对数据服务的所有调用。这些对数据服务的调用都结束了,因此我们要确保这些 DS 调用在任何给定时间按顺序依次执行。最初,我在这些方法中的每一个上使用 async await 并且每个调用都是异步执行的,但我们发现如果它们乱序,那么就有出错的空间。
所以,我认为我们应该将所有这些异步任务排队并在一个单独的线程中发送它们,但我想知道我们有哪些选择?我遇到了 'SemaphoreSlim' 。这在我的用例中是否合适?或者还有哪些其他选项适合我的用例?请指导我。
所以,我目前在我的代码中有什么
public static SemaphoreSlim mutex = new SemaphoreSlim(1);
//first DS call
public async Task SendModuleDataToDSAsync(Module parameters)
{
var tasks1 = new List<Task>();
var tasks2 = new List<Task>();
//await mutex.WaitAsync(); **//is this correct way to use SemaphoreSlim ?**
foreach (var setting in Module.param)
{
Task job1 = SaveModule(setting);
tasks1.Add(job1);
Task job2= SaveModule(GetAdvancedData(setting));
tasks2.Add(job2);
}
await Task.WhenAll(tasks1);
await Task.WhenAll(tasks2);
//mutex.Release(); // **is this correct?**
}
private async Task SaveModule(Module setting)
{
await Task.Run(() …Run Code Online (Sandbox Code Playgroud)