最近发现在C#中使用异步套接字API实际上是在调用线程上执行DNS解析,所以如果解析有问题,它会挂起直到超时。
我想找到一种方法来模拟 DNS 解决问题而无需接触正在运行的代码,以便 QA 也可以在测试中使用它。
Insentive:许多 .NET 异步 API,如 WebRequest、Image(WinForms、WPF)在调用线程上执行 DNS 解析,这可能导致 UI 挂起。
示例:(我希望能够模拟的内容)
如果 DNS 无法解析代码,则代码将永远不会到达 (1),但在经过一些超时延迟后,将从 (2) 中的 EndGetResponse 引发异常。
class Program
{
static void Main()
{
var request = WebRequest.Create("http://www.google.com");
request.BeginGetResponse(WebRequestCallback, request);
// (1)
Console.ReadLine();
}
private static void WebRequestCallback(IAsyncResult ar)
{
// (2)
var response = ((WebRequest) ar.AsyncState).EndGetResponse(ar);
}
}