等待正面回应(来自服务器)

时间:2018-07-11 10:31:58

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

在我上一个关于 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

}

同样,这似乎过于复杂。我希望您能提出更简单的方法

1 个答案:

答案 0 :(得分:0)

不要重新发明轮子。有一个Polly库,它完全支持重试方案

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

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