private static void NotifyClients <T>(OperationDelegate <T> operationDelegate, Operation op, T obj)
    {
        if (operationDelegate == null)
        {
            return;
        }

        Delegate[] invkList = operationDelegate.GetInvocationList();

        foreach (OperationDelegate <T> handler in invkList)
        {
            new Thread(() =>
            {
                try
                {
                    handler(op, obj);
                    Console.WriteLine("Invoking event handler");
                }
                catch (Exception)
                {
                    operationDelegate -= handler;
                    Console.WriteLine("Exception: Removed an event handler");
                }
            }).Start();
        }
    }
    void NotifyWorkers(Operations op, Order order, OperationDelegate wd)
    {
        if (wd != null)
        {
            Delegate[] invkList = wd.GetInvocationList();

            foreach (OperationDelegate handler in invkList)
            {
                try
                {
                    IAsyncResult ar = handler.BeginInvoke(op, order, null, null);
                    Console.WriteLine("Invoking event handler");
                }
                catch (Exception)
                {
                    wd -= handler;
                }
            }
        }
    }