Safe invoke multicast delegate C# with Example
Ever wanted to call a multicast delegate but you want the entire invokation list to be called even if an exception occurs in any in the chain. Then you are in luck, I have created an extension method that does just that, throwing an AggregateException only after execution of the entire list completes: public static class DelegateExtensions { public static void SafeInvoke(this Delegate del,params object[] args) { var exceptions = new List(); foreach (var handler in del.GetInvocationList()) { try { handler.Method.Invoke(handler.Target, args); } catch (Exception ex) { exceptions.Add(ex); } } if(exceptions.Any()) { throw new AggregateException(exceptions); } } } public class Test { public delegate void SampleDelegate(); public void Run() { SampleDelegate delegateInstance = this.Target2; delegateInstance += this.Target1; try { delegateInstance.SafeInvoke(); } catch(AggregateException ex) { // Do any exception handling here } } private void Target1() { Console.WriteLine("Target 1 executed"); } private void Target2() { Console.WriteLine("Target 2 executed"); throw new Exception(); } } This outputs: Target 2 executed Target 1 executed Invoking directly, without SaveInvoke, would only execute Target 2.