进行“重新连接”的最佳方法是WithAutomaticReconnect
method.
因此,您可以使用内置的重新连接逻辑,而不是编写自己的重新连接逻辑。
首先,您必须删除当前的重新连接逻辑,然后添加.WithAutomaticReconnect()
给你的HubConnectionBuilder
.
现在你有两个选择:
默认行为:
该方法的默认值为TimeSpan[0, 2000, 10000, 30000, null]
,这意味着每次尝试重新连接失败后,它将等待 X (0, 2, 10, 30) 秒。一旦达到null
,它将停止尝试。
您可以自定义这个数组,但它的末尾总是有一个空值,这使得如果您希望它无限尝试,它会变得不可靠。
这给我们带来了下一个选择:
自定义IRetryPolicy
An IRetryPolicy
表示多少秒HubConnectionBuilder
每次尝试失败后必须等待再次尝试重新连接。
此方法无限运行,直到连接恢复。
实施自定义IRetryPolicy
:
public class RetryPolicyLoop : IRetryPolicy
{
private const int ReconnectionWaitSeconds = 5;
public TimeSpan? NextRetryDelay(RetryContext retryContext)
{
return TimeSpan.FromSeconds(ReconnectionWaitSeconds);
}
}
这就是你的样子HubConnectionBuilder
:
.WithAutomaticReconnect(new RetryPolicyLoop())