首页 > 解决方案 > BeginGetHostAddresses 异步回调是否在另一个线程中调用而不是初始

问题描述

我的任务是解析巨大的文件日志,所以性能很重要。对于每个日志行:我正在调用Dns.GetHostAddresses以通过主机名获取 IP 地址并将其设置为我的模型的字段之一。

result.Ip = Dns.GetHostAddresses(result.Host)[0].MapToIPv6().ToString(); // Other code and save result to data base

并将结果模型保存到数据库后记。

有时会GetHostAddresses抛出"No such host is known"异常,因此最简单的方法是将其放入try{}catch{}块中。但据我所知 - 这个块会降低性能。所以我发现也有Dns.BeginGetHostAddresses方法。result所以我尝试使用它并测试在模型保存到数据库之前是否没有调用异步回调:

Dns.BeginGetHostAddresses(result.Host, (x) => { try { // Thread.Sleep(10000); IPAddress[] addresses = Dns.EndGetHostAddresses(x); // Thread.Sleep(10000); IPAddress address = addresses[0]; result.Ip = address?.MapToIPv6().ToString(); } catch { } }, null); // Other code and save result to data base

我看到这种方式的性能比Dns.GetHostAddresses使用时要高得多。使用调试器我看到回调总是在进入下一行代码之前完成。但仍然不确定这是调试的副作用还是真实状态。

我的问题是:

async callback另一个线程中调用并且可能存在我的模型 -在设置result字段之前保存到数据库的情况Ip

标签: asynchronous.net-coreasynccallback

解决方案


推荐阅读