Async Result Class C# with Example
using System; using System.Threading; using System.Runtime.Remoting.Messaging; namespace CSharpMultiThreading { public delegate int Addition(int x, int y); class InvokingMethodAsyncronously { private static bool isDone = false; static void Main(string[] args) { // Print out the ID of the executing thread. Console.WriteLine("Main() invoked on thread {0}.",Thread.CurrentThread.ManagedThreadId); // Invoke Add() on a secondary thread. Addition b = new Addition(Add); IAsyncResult iftAR = b.BeginInvoke(10, 10, new AsyncCallback(AddComplete), null); while (!isDone) { Console.WriteLine("Working..."); Thread.Sleep(1000); } } static void AddComplete(IAsyncResult itfAR) { Console.WriteLine("AddComplete() invoked on thread {0}.",Thread.CurrentThread.ManagedThreadId); Console.WriteLine("Your addition is complete"); // Now get the result. AsyncResult ar = (AsyncResult)itfAR; Addition b = (Addition)ar.AsyncDelegate; Console.WriteLine("10 + 10 is {0}.", b.EndInvoke(itfAR)); isDone = true; } static int Add(int x, int y) { // Print out the ID of the executing thread. Console.WriteLine("Add() invoked on thread {0}.",Thread.CurrentThread.ManagedThreadId); // Pause to simulate a lengthy operation. Thread.Sleep(5000); return x + y; } } }