2016-08-11 26 views
0

我想包裝win32 DNS API DnsQueryEx函數,以便它可以通過.NET TPL使用。我無法使用System.Net.Dns名稱空間中的託管方法,因爲它們沒有實現CNAME記錄查找。通過本地調用實現異步模式

,想到的唯一方法是與使用非阻塞輪詢之間等待定期輪詢此操作的結果:上述

await Task.Delay(n) 

的解決方案似乎效率不高。有沒有更好的方法來完成這一點?

+0

使用DNS_QUERY_COMPLETION_ROUTINE callback如何doeshould DnsQueryEx通常通知它有一個結果基於任務異步方法?你不能只從Task.Run中調用它並等待結果嗎? –

回答

0

documentation明確指出:

如果到DnsQueryEx呼叫異步完成,的的 查詢的結果由DNS_QUERY_COMPLETION_ROUTINE回調 pQueryRequest返回,pQueryResults的QueryStatus成員包含 DNS_REQUEST_PENDING ,並且DnsQueryEx返回DNS_REQUEST_PENDING。 應用程序應跟蹤傳遞 到DnsQueryEx中的pQueryResults結構,直到DNS回調成功。應用程序可以使用由DnsQueryEx返回的pCancelHandle句柄 來取消異步查詢。

使用TaskCompletionSource以實現pQueryRequest