IAsyncResult
オブジェクト、特にクラスのGetHostEntry
メソッドを返す非同期操作を呼び出したいと思います。System.Net.Dns
のプロパティのWaitOne
メソッドを呼び出して、操作が完了するまで特定のタイムアウトで待機する必要があることは理解していましたが、このコードが機能しないため、明らかに間違っています。AsyncWaitHandle
IAsyncResult
using System;
using System.Net;
static class Program {
class GetHostEntryState {
public IPHostEntry Value {
get;
set;
}
}
static void Main(string[] args) {
string hostName = "somehost";
int timeout = 1000;
var state = new GetHostEntryState();
var asyncResult = Dns.BeginGetHostEntry(hostName, ar => {
((GetHostEntryState)ar.AsyncState).Value = Dns.EndGetHostEntry(ar);
}, state);
if (asyncResult.AsyncWaitHandle.WaitOne(timeout) && asyncResult.IsCompleted) {
if (state.Value == null) {
// we always hit this condition
Console.WriteLine("state.Value == null");
return;
}
foreach (var address in state.Value.AddressList) {
Console.WriteLine(address);
}
} else {
Console.WriteLine("timed out");
}
}
}
msdnの例では、ManualResetEvent
オブジェクトを使用して同期を行います。それは必要ですか?もしそうなら、AsyncWaitHandle
ここのプロパティの用途は何ですか?