2016-08-11 2 views
0

.NET TPL経由で使用できるようにwin32 DNS API DnsQueryEx関数をラップしたいと思います。 System.Net.Dns名前空間の管理対象メソッドは、CNAMEレコードのルックアップを実装していないため使用できません。ネイティブコールで非同期パターンを実装する

頭に浮かぶ唯一の方法は、使用してポーリング間の非ブロッキング待機して定期的にこの操作の結果をポーリングすることです:

await Task.Delay(n) 

を上記の溶液は非効率です。これを達成するより良い方法はありますか?

+0

DNS_QUERY_COMPLETION_ROUTINE callbackを使用してタスクベースの非同期メソッドを実装するには?あなたはTask.Runからそれを呼び出すことはできませんし、結果を待っていますか? –

答えて

0

documentationがはっきりと述べている:DnsQueryExへの呼び出しが非同期的に完了した場合、 クエリの結果が pQueryRequestでDNS_QUERY_COMPLETION_ROUTINEコールバックによって返され、pQueryResultsのQueryStatusメンバーが DNS_REQUEST_PENDINGが含まれてい

DnsQueryExはDNS_REQUEST_PENDINGを返します。 アプリケーションは、DNSコールバックが成功するまで に渡されたpQueryResults構造体をDnsQueryExに追跡する必要があります。アプリケーションは 、非同期クエリをキャンセルするには、pCancelHandleハンドルを使用して、DnsQueryExによって を返します。

使用TaskCompletionSource DnsQueryExは、通常、それは結果を持っている通知方法doeshould pQueryRequest

関連する問題