+ -
当前位置:首页 → 问答吧 → 请问,这个异步执行的代码

请问,这个异步执行的代码

时间:2011-12-17

来源:互联网

class Program
  {
  public delegate void takedelegate(int ms);
  public static void takeMethod(int ms)
  {
  Thread.Sleep(ms);
  }
  static void Main(string[] args)
  {
  takedelegate dl = takeMethod;
  IAsyncResult ar = dl.BeginInvoke(3000, takecompleted, "我爱熊俊" );
  Console.WriteLine("开始执行");
  for (int i = 0; i < 100; i++)
  {
  Console.Write(".");
  Thread.Sleep(50);
  if (ar.IsCompleted) // IsCompleted属性判断异步操作是否完成
  {
  Console.WriteLine("执行完毕 ");
  break;
  }
  }
  Console.Read();
  }
  static void takecompleted(IAsyncResult ar)  
  {
  string s = ar.AsyncState.ToString();
  Console.Write(s);
  }
  } 

我的问题,for循环中有一个判断异步执行是否完成的if判断,if (ar.IsCompleted)
我想问的是:BeginInvoke方法从开始执行,就返回了一个IAsyncResult,它就是ar,此时,ar.IsCompleted为false
然后,开始执行for循环,当异步执行完之后,也会返回一个IAsyncResult,此时它的IsCompleted属性为true,不过,for循环里面的IsCompleted应该始终是false吧,为ture,是怎么传进去的呢?

作者: drbrdvgrd43   发布时间: 2011-12-17

真正的异步编程,就不会用什么循环、线程阻塞了。

作者: sp1234   发布时间: 2011-12-17