Csharp/C Sharp/Development Class/IAsyncResult

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

sample code for the EndInvoke method

<source lang="csharp"> using System; using System.Threading; public delegate int DelegateClass(out DateTime start,out DateTime stop); public class Starter {

   public static void Main() {
       DelegateClass del = MethodA;
       DateTime start;
       DateTime stop;
       IAsyncResult ar = del.BeginInvoke(out start, out stop,null, null);
       ar.AsyncWaitHandle.WaitOne();
       int elapse = del.EndInvoke(out start, out stop, ar);
       Console.WriteLine("Start time: {0}", start.ToLongTimeString());
       Console.WriteLine("Stop time: {0}", stop.ToLongTimeString());
       Console.WriteLine("Elapse time: {0} seconds",elapse);
   }
   public static int MethodA(out DateTime start, out DateTime stop) {
       start = DateTime.Now;
       Thread.Sleep(5000);
       stop = DateTime.Now;
       return (stop - start).Seconds;
   }

}

</source>


What happens if an unhandled exception is raised in a multicast delegate?

<source lang="csharp"> using System; using System.Threading; public delegate void DelegateClass(); public class Starter {

   public static void Main() {
       Console.WriteLine("Running on primary thread");
       try {
           DelegateClass del = MethodA;
           IAsyncResult ar = del.BeginInvoke(null, null);
           del.EndInvoke(ar);
       } catch (Exception except) {
           Console.WriteLine("Running on primary thread");
           Console.WriteLine("Exception caught: " + except.Message);
       }
   }
   public static void MethodA() {
       if (Thread.CurrentThread.IsThreadPoolThread == true) {
           Console.WriteLine("Running on a thread pool thread");
       } else {
           Console.WriteLine("Running on primary thread");
       }
       throw new Exception("failure");
   }

}

</source>