如果你刚刚调用End,为什么要打电话给WaitOne?不结束?

时间:2011-09-20 05:50:38

标签: c# multithreading

试图了解this MSDN sample,但我对这些问题感到困惑:

IAsyncResult result = Dns.BeginGetHostEntry(args[0], null, null);
Console.WriteLine("Processing request for information...");
// Wait until the operation completes.
result.AsyncWaitHandle.WaitOne();
// The operation completed. Process the results.
try 
{
    // Get the results.
    IPHostEntry host = Dns.EndGetHostEntry(result);

例如,为什么即使使用异步编程也只是阻止线程直到任务完成?另外,调用WaitOne有什么好处呢?在操作完成之前,End函数是否会自动阻止?

在这里相当困惑..

1 个答案:

答案 0 :(得分:2)

是的,EndGetHostEntry会阻止操作完成。我怀疑这只是一个不好的例子,说实话 - 可能是尝试向您展示两种不同的等待方式,直到操作完成,但是通过将它们放在同一个例子中它只是增加了混乱。

同样,如果它包含了“//在这里做更多工作”或类似的评论,肯定会更有用。

听起来你对API的理解很好,你应该忽略这个例子 - 或者在“用户内容”部分的底部添加一个注释来提及所有这些。