C# で非同期ソケット API を使用すると、実際には呼び出し元のスレッドで DNS 解決が実行されるため、解決に問題がある場合はタイムアウトになるまでハングすることが最近発見されました。
QA がテストでも使用できるように、実行中のコードに触れることなく DNS 解決の問題をシミュレートする方法を見つけたいと考えています。
Insentive : WebRequest、Image (WinForms、WPF) などの多くの .NET 非同期 API は、呼び出し元のスレッドで 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);
}
}