2016-08-11 8 views
0

Ich möchte die Win32-DNS-API-Funktion DnsQueryEx umschließen, so dass es über die .NET TPL verwendet werden kann. Ich kann die verwalteten Methoden im System.Net.Dns-Namespace nicht verwenden, da sie keine CNAME-Datensatzsuche implementieren.Implementieren asynchronen Muster über nativen Anruf

Der einzige Weg, dass in den Sinn kommt, ist das Ergebnis dieser Operation in regelmäßigen Abständen mit blockierungs wartet zwischen Umfragen abfragen mit:

await Task.Delay(n) 

Die Lösung oben ineffizient scheint. Gibt es einen besseren Weg, dies zu erreichen?

+0

Wie doeshould DnsQueryEx normalerweise mitteilen es ein Ergebnis hat? Kannst du es nicht einfach von einer Task.Run aufrufen und auf das Ergebnis warten? –

Antwort

0

Die documentation eindeutig fest, dass:

Wenn ein Aufruf an DnsQueryEx asynchron abgeschlossen ist, die Ergebnisse der Abfrage durch den DNS_QUERY_COMPLETION_ROUTINE Rückruf zurückgegeben werden, in pQueryRequest, der Querystatus Mitglied der pQueryResults enthält DNS_REQUEST_PENDING und DnsQueryEx gibt DNS_REQUEST_PENDING zurück. Anwendungen sollten die pQueryResults-Struktur verfolgen, die in DnsQueryEx übergeben wird, bis der DNS-Rückruf erfolgreich ist. Anwendungen können eine asynchrone Abfrage abbrechen, die das pCancelHandle-Handle verwendet, das von DnsQueryEx zurückgegeben wird.

Verwenden TaskCompletionSource Aufgabe basierte asynchrone Methode zu implementieren DNS_QUERY_COMPLETION_ROUTINE callback in pQueryRequest mit

Verwandte Themen