在我上一个关于 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
}
同样,这似乎过于复杂。我希望您能提出更简单的方法
答案 0 :(得分:0)
不要重新发明轮子。有一个Polly库,它完全支持重试方案
这是您的案例的异步示例。如果存在异常或返回了false
的结果,它将重试您的操作异步。
await Policy
.Handle<Exception>()
.OrResult<bool>(b => !b)
.WaitAndRetry(new[]
{
TimeSpan.FromSeconds(1),
})
.RetryAsync()
.ExecuteAsync(() => requestPermission());