Csharp/C Sharp by API/System.Runtime.Remoting.Messaging/IAsyncResult
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>