C# 如果并行调用,Mono Dns操作将挂起

C# 如果并行调用,Mono Dns操作将挂起,c#,dns,mono,C#,Dns,Mono,我在Mono上的Dns类中遇到了一个高重复性的问题,从C#调用:若我从多台机器(例如,在集群上)执行多个调用,或多或少是并发的(比如当批处理程序启动时),一些随机数目的调用会挂起 Mono Dns类似乎很可能没有正确地超时和重新发出请求:Dns使用基于UDP的RPC协议,并且由于UDP不可靠,如果十个数据包同时命中Dns服务器或某个数据包丢失,则不会得到回复 我的问题是:有没有人知道一种干净的方法可以中断从Mono上的C#对Dns.GetHostName或Dns.GetHostInfo的调用,以

我在Mono上的Dns类中遇到了一个高重复性的问题,从C#调用:若我从多台机器(例如,在集群上)执行多个调用,或多或少是并发的(比如当批处理程序启动时),一些随机数目的调用会挂起

Mono Dns类似乎很可能没有正确地超时和重新发出请求:Dns使用基于UDP的RPC协议,并且由于UDP不可靠,如果十个数据包同时命中Dns服务器或某个数据包丢失,则不会得到回复


我的问题是:有没有人知道一种干净的方法可以中断从Mono上的C#对Dns.GetHostName或Dns.GetHostInfo的调用,以便在发生这种情况时,我可以强制重新发出请求?

现在我想我应该回答我自己的问题了。因此,交易是,Mono的库中确实存在一些与DNS对话的bug,从2005年左右开始记录,但尚未修复。有一个DNS库的第二个版本,一些人声称它工作得更好

出于我自己的目的,事实证明我可以从代码中消除几乎所有的DNS调用。毕竟,由DNS中丢失的数据包触发的DNS代码挂起是一件非常可怕的事情

我认为这是一个很好的代码示例,它将UDP通信视为可靠的,因为除了在重载下,它非常可靠,所以有一个挥之不去的错误,根本无法修复。但是很容易通过简单地将Mono DNS置于重载下触发