当SshStream不再有效时,SshStream. expect()会中断代码

本文关键字:SshStream 代码 中断 不再 有效 expect | 更新日期: 2023-09-27 18:14:01

我试图在SSH上做自动化,但服务器有故障,没有正确实现执行通道,所以我最终使用CreateShellStream()做了一个解决方案。我可以预期,在运行程序时,连接将不可用,断开连接是一件事。我的解决方案:

while(!_cancellationToken.IsCancellationRequested))
{
    ShellStream stream = null;
    while(stream == null)
    {
        stream = await GetSshStream();
    }
    while(stream.CanWrite && stream.CanRead)
    {
        stream.WriteLine(command);
        //this breaks everything if stream is not valid
        var rep = stream.Expect(new Regex(@"[$>]")); 
        var delimiters = new[] { " ", "'r'n", "'t" };
        var values = rep.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
        DealWithValues(values);
    }
}

此工作并等待连接,一旦连接开始coms。出现的问题是,stream.CanWrite && stream.CanRead不足以检测到stream是健康的,一旦连接丢失,流变得无效,并与Expect();一起使用,一切都中断了。跳出所有循环,通过try {} catch{},甚至使Visual Studio调试器步进中断并在另一个线程(多线程程序)中继续程序。是否有一种方法来阻止这种情况的发生,并抛出执行回到第一个while ?我可以创建一个新的流,每次我需要访问服务器,但由于我轮询参数大约每秒一次,我不想有每次重新连接的开销。

当SshStream不再有效时,SshStream. expect()会中断代码

我误以为线程消失代码执行停止了。相反,线程休眠等待输入。Expect有一个超时过载,我应该一直使用它