0
我想包装win32 DNS API DnsQueryEx
函数,以便它可以通过.NET TPL使用。我无法使用System.Net.Dns
名称空间中的托管方法,因为它们没有实现CNAME记录查找。通过本地调用实现异步模式
,想到的唯一方法是与使用非阻塞轮询之间等待定期轮询此操作的结果:上述
await Task.Delay(n)
的解决方案似乎效率不高。有没有更好的方法来完成这一点?
我想包装win32 DNS API DnsQueryEx
函数,以便它可以通过.NET TPL使用。我无法使用System.Net.Dns
名称空间中的托管方法,因为它们没有实现CNAME记录查找。通过本地调用实现异步模式
,想到的唯一方法是与使用非阻塞轮询之间等待定期轮询此操作的结果:上述
await Task.Delay(n)
的解决方案似乎效率不高。有没有更好的方法来完成这一点?
的documentation明确指出:
如果到DnsQueryEx呼叫异步完成,的的 查询的结果由DNS_QUERY_COMPLETION_ROUTINE回调 pQueryRequest返回,pQueryResults的QueryStatus成员包含 DNS_REQUEST_PENDING ,并且DnsQueryEx返回DNS_REQUEST_PENDING。 应用程序应跟踪传递 到DnsQueryEx中的pQueryResults结构,直到DNS回调成功。应用程序可以使用由DnsQueryEx返回的pCancelHandle句柄 来取消异步查询。
使用TaskCompletionSource以实现pQueryRequest
使用
DNS_QUERY_COMPLETION_ROUTINE callback
如何doeshould DnsQueryEx通常通知它有一个结果基于任务异步方法?你不能只从Task.Run中调用它并等待结果吗? –