解决方法是通过创建一个名为 "KeepAlive" 的计时器来维护连接状态。代码示例如下:
private static void KeepAlive(object state)
{
try
{
IAsyncResult res = _manager.Client.BeginPing(
ar =>
{
try
{
_manager.Client.EndPing(ar);
}
catch (Exception ex)
{
// 异常处理
}
},
null);
if (!res.AsyncWaitHandle.WaitOne(_keepAliveTimeout))
{
// 超时处理
}
}
catch (Exception ex)
{
// 异常处理
}
}
其中 _keepAliveTimeout
表示超时时间,_manager.Client
表示 Asterisk 连接对象。这样就可以避免 ConnectionState 的问题。