异步重试循环

时间:2018-06-27 18:39:21

标签: c# async-await asp.net-core-signalr

假设我有一个通信库的async Connect方法,如果该方法失败则抛出异常(在我的情况下为SignalR,但这与问题无关紧要)。我想在服务应用程序中调用此方法,以尝试整天连接到Web应用程序(并重新连接),每次重试之间有10秒的延迟,因此只要有可用,Web应用程序都将重新连接。 (通常它通常在大多数时间都处于连接状态,但由于维护,IIS应用程序池回收等原因会导致停机)

我想可以用计时器来完成,但是我考虑过像这样使用Task.Delay和递归调用:

public async Task StartConnection()
{
    try
    {
        await Connect();
    }
    catch(Exception ex)
    {
        //Failed, log error, wait 10 sec and try again.
        await Task.Delay(10000);

        await StartConnection();        
    }
}

由于我仍然不了解异步编程的所有副作用,所以我的问题是:

这是合法模式还是有任何问题?

对于断开连接后的重新连接,我将使用Disconnected事件(在SignalR中称为Closed),然后再次调用StartConnection

0 个答案:

没有答案