【问题标题】:Waiting for a positive response (from a server)等待肯定响应(来自服务器)
【发布时间】:2018-07-11 10:31:57
【问题描述】:

根据我在 how to wait for processes to complete 上一个问题中给出的好主意,我想问一些相关的问题。

这一次我没有两个进程一个接一个地执行,而是只有一个进程必须在 之后从服务器获得肯定响应。像这样的

private async Task<bool> requestPermission()
{
    var result = await sendRequestToServer();
    return result;
}

private async Task Process1()
{ bool amIOktoGo=false;
   amIOktoGo= await requestPermission();
   while(!amIOktoGo)
   {
      await Task.Delay(1000);
     amIOktoGo= await requestPermission();
    } 

   
  //Finally! Do some more stuff involving awaits and requests from the server

}

同样,这似乎过于复杂。有没有更简单的方法来做到这一点?

【问题讨论】:

  • @bommelding winforms

标签: c# timer async-await dotnet-httpclient


【解决方案1】:

不要重新发明轮子。有一个库Polly 完全支持重试场景

这是您案例的异步示例。如果有异常或返回结果false,它会异步重试您的操作。

await Policy
  .Handle<Exception>()
  .OrResult<bool>(b => !b)
  .WaitAndRetry(new[]
  {
     TimeSpan.FromSeconds(1),
  })
  .RetryAsync()
  .ExecuteAsync(() => requestPermission());

【讨论】:

  • 发布的代码是否包含等待时间? (在我的情况下为 1 秒)
  • @KansaiRobot 你可以自己检查图书馆。我发现他们也有等待时间。看看我的答案更新了
猜你喜欢
  • 1970-01-01
  • 2013-10-25
  • 1970-01-01
  • 2017-06-28
  • 2015-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多