假设我有一个通信库的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
。