AuthenticateAsServerAsync挂起(AuthenticateAsServerAs

2019-09-27 18:45发布

我正在使用

await stream.AuthenticateAsServerAsync(serverCert, true, SslProtocols.Tls, false);

在我的应用程序,以确保连接。 不幸的是在罕见的情况下(大约三分之一的1000),这完全挂起。 我试图在较低级别设置超时NetworkStreamTcpClient

但没有什么作品,这些连接不断积累随着时间的推移。

并通过将其完全挂起我的意思是它卡住里面有天(如果该应用程序运行,长期)。

我目前正在与一个肮脏的黑客解决了这个。 即时通讯开始一个新的线程,等待里面5秒,如果通话didnt及时归还我打电话tcpClient.Close()来强制SslStream中止。

请告诉我这里的问题? 什么是你需要超时上的功能,但没有超载,需要一个时间跨度或到的CancellationToken处理这样一般情况下预期的方式吗?

不应该在TcpClient的下级超时至少抛出一个异常? 这是为什么没有发生要么?

Answer 1:

原因

好像所有与网络相关的东西,不支持超时异步版本。 这就是为什么AuthenticateAsServerAsync不支持超时无论是。

从文档:

注意

只有同步读取通过调用Read方法进行此属性影响。 此属性不影响异步读取调用的BeginRead方法进行。

我该如何解决它

在我开始AuthenticateAsServerAsync(......)我第一次与延迟开始自己的任务。

Task.Run(async() {
    await Task.Delay(TimeSpan.FromMinutes(1));
    tcpClient.Close();
});

如果有人有更好的方式来做到这一点,请让我知道:)



文章来源: AuthenticateAsServerAsync hangs