2008-06-30 00:27
//如果一个未经处理的异常在一个多播委托中被引发,会发生什么事情呢?如果该委托在一个保护代码块 //中被调用,异常将可以被捕获。直到异常发生,调用列表才会被调用,在调用列表随后的函数将不会被 //执行。如果异常在一个异步执行的委托中被引发,情况可能会显得更复杂。在这样的情况下,异常是 //在一个不同的线程中被引发。但是,运行时会将异常带回正在调用的线程。异常就像委托被同步调用到 //一样 using System; using System.Collections.Generic; using System.Text; using System.Threading;
namespace 委托的异常 { public delegate void DelegateClass(); class Program { static void Main(string[] args) { Console.WriteLine("Running on primary thread"); try { DelegateClass del = MethodA; IAsyncResult ay= del.BeginInvoke(null,null); del.EndInvoke(ay); } catch (Exception except) { Console.WriteLine("running on a primary thread"); Console.WriteLine("exception caught:" + except.Message); } } public static void MethodA() { if (Thread.CurrentThread.IsThreadPoolThread == true) { Console.WriteLine("running on a threadpool thread"); } else { Console.WriteLine("running on a primary thread"); } throw new Exception("failure"); } } }
|
本文转自悬魂博客园博客,原文链接:http://www.cnblogs.com/xuanhun/archive/2010/02/03/1662384.html,如需转载请自行联系原作者