Csharp/C Sharp by API/System.Runtime.Remoting.Messaging/IAsyncResult

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

IAsyncResult.AsyncState

<source lang="csharp"> using System; using System.Collections.Generic; using System.Text; using System.Threading; using System.Runtime.Remoting.Messaging; public delegate int BinaryOp(int x, int y); class Program {

   static void Main(string[] args) {
       BinaryOp b = new BinaryOp(Add);
       IAsyncResult iftAR = b.BeginInvoke(10, 10, new AsyncCallback(AddComplete), "Main() thanks you for adding these numbers.");
       Console.ReadLine();
   }
   static void AddComplete(IAsyncResult itfAR) {
       AsyncResult ar = (AsyncResult)itfAR;
       BinaryOp b = (BinaryOp)ar.AsyncDelegate;
       Console.WriteLine("10 + 10 is {0}.", b.EndInvoke(itfAR));
       string msg = (string)itfAR.AsyncState;
       Console.WriteLine(msg);
   }
   static int Add(int x, int y) {
       Console.WriteLine("Add() invoked on thread {0}.", Thread.CurrentThread.GetHashCode());
       Thread.Sleep(5000);
       return x + y;
   }

}


 </source>


IAsyncResult.AsyncWaitHandle

<source lang="csharp"> using System; using System.Collections.Generic; using System.Text; using System.Threading; public delegate int BinaryOp(int x, int y); class Program {

   static void Main(string[] args) {
       BinaryOp b = new BinaryOp(Add);
       IAsyncResult iftAR = b.BeginInvoke(10, 10, null, null);
       while (!iftAR.AsyncWaitHandle.WaitOne(2000, true)) {
           Console.WriteLine("Doing more work in Main()!");
       }
       int answer = b.EndInvoke(iftAR);
       Console.WriteLine("10 + 10 is {0}.", answer);
   }
   static int Add(int x, int y) {
       Console.WriteLine("Add() invoked on thread {0}.", Thread.CurrentThread.GetHashCode());
       Thread.Sleep(5000);
       return x + y;
   }

}


 </source>