/// <summary> /// 线程同步,“阻塞”调用,两个线程工作 /// </summary> static void Demo04() { Console.WriteLine("******* 线程同步,“阻塞”调用,两个线程工作 *********"); Console.WriteLine("Main() invokee on thread {0}.", Thread.CurrentThread.ManagedThreadId); //将委托实例指向Add()方法 AddOp pAddOp = new AddOp(Add); IAsyncResult iftAR = pAddOp.BeginInvoke(10, 10, null, null); //判断委托线程是否执行完任务, //没有完成的话,主线程就做其他的事 while (!iftAR.IsCompleted) { Console.WriteLine("Main()方法工作中.......线程ID是:{0}", Thread.CurrentThread.ManagedThreadId); Thread.Sleep(1000); } //获得返回值 int answer = pAddOp.EndInvoke(iftAR); Console.WriteLine("10 + 10 = {0}.", answer); Console.ReadLine(); }
/// <summary> /// 线程异步 委托异步线程 两个线程“同时”工作 /// </summary> static void Demo03() { Console.WriteLine("******* 委托异步线程 两个线程“同时”工作 *********"); //显示主线程的唯一标示 Console.WriteLine("调用Main()的主线程的线程ID是:{0}.", Thread.CurrentThread.ManagedThreadId); //将委托实例指向Add()方法 AddOp pAddOp = new AddOp(Add); //开始委托次线程调用。委托BeginInvoke()方法返回的类型是IAsyncResult, //包含这委托指向方法结束返回的值,同时也是EndInvoke()方法参数 IAsyncResult iftAR = pAddOp.BeginInvoke(10, 10, null, null); //int i = 0; //while (!iftAR.IsCompleted) //{ // Console.WriteLine("Main()方法中执行其他任务........线程ID是:{0},执行第{1}次", Thread.CurrentThread.ManagedThreadId, i.ToString()); // i++; //} int sum = pAddOp.EndInvoke(iftAR); Console.WriteLine("10 + 10 = {0}.", sum); Console.ReadLine(); }