在不同于初始的另一个线程中调用BeginGetHostAddresses异步回调

时间:2019-05-12 10:09:44

标签: asynchronous .net-core asynccallback

我的任务是解析巨大的文件日志,因此性能很重要。对于每个日志行: 我正在呼叫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保存到数据库吗? < / p>

0 个答案:

没有答案