Example implementation of a callback method for use in the Asynchronous Programming Model

I always seem to forget about the mechanics of implementing a Callback method that can be used in the Asynchronous Programming Model (APM). So here is a simple example in C# 3.0 using the Func<T, TResult> delegate:

class Program
{
 static void Main(string[] args)
 {
  Func<string, string> echoDelegate = Echo;
  IAsyncResult asyncResult = echoDelegate.BeginInvoke("some input", EchoCallback, "x");

  WaitHandle.WaitAll(new WaitHandle[] {asyncResult.AsyncWaitHandle});

  Console.Write("{0}Press any key to continue...", Environment.NewLine);
  Console.ReadKey();
 }

 static string Echo(string input)
 {
  return string.Format("Echoing {0}", input);
 }

 static void EchoCallback(object state)
 {
  IAsyncResult r = (IAsyncResult)state;
  Debug.Assert(r.AsyncState == "x");

  AsyncResult asyncResult = (AsyncResult)state;
  Func<string, string> echoDelegate = (Func<string, string>)asyncResult.AsyncDelegate;
  string echoResult = echoDelegate.EndInvoke(asyncResult);
  Debug.Assert(echoResult == "Echoing some input");

  Console.WriteLine("EchoCallback completed.");
 }
}

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>