在本机调用上实现异步模式

时间:2016-08-11 22:10:39

标签: c#

我想包装win32 DNS API DnsQueryEx函数,以便可以通过.NET TPL使用它。我无法在System.Net.Dns命名空间中使用托管方法,因为它们没有实现CNAME记录查找。

唯一可以想到的方法是定期轮询此操作的结果,并使用以下方法在轮询之间进行非阻塞等待:

await Task.Delay(n)

上述解决方案似乎效率低下。有没有更好的方法来实现这一目标?

1 个答案:

答案 0 :(得分:0)

documentation明确指出:

  

如果对DnsQueryEx的调用异步完成,则结果   查询由DNS_QUERY_COMPLETION_ROUTINE回调返回   pQueryRequest ,pQueryResults的QueryStatus成员包含   DNS_REQUEST_PENDING,DnsQueryEx返回DNS_REQUEST_PENDING。   应用程序应跟踪传递的pQueryResults结构   进入DnsQueryEx直到DNS回调成功。应用可以   使用返回的pCancelHandle句柄取消异步查询   通过DnsQueryEx。

使用TaskCompletionSourceDNS_QUERY_COMPLETION_ROUTINE callback

中使用pQueryRequest实现基于任务的异步方法