Remove Delegate from event - cause Sync issues?
<p>I have an event </p>

<pre><code>this._sequencer.Completed
</code></pre>

<hr>

<p>Two delegates are subscribed to this</p>

<pre><code>this._sequencer.Completed += OnActivityFinished;
this._sequencer.Completed += OnCarrierReLoaded;
</code></pre>

<hr>

<p>The delegates implemnetation is as given below</p>

<pre><code>void OnActivityFinished(object sender, EventArgs e)
{
     // Do some activity
     this._sequencer.Completed -= OnActivityFinished
}
void OnCarrierReLoaded(object sender, EventArgs e)
{
     // Do some activity
     this._sequencer.Completed -= OnCarrierReLoaded
}
</code></pre>

<hr>

<p>The delegates in the event are invoked asynchronosly as given below.<strong>Will it cause a synchroniztion issue if the delegate is removed from the event as given above?
Please help me</strong></p>

<pre><code>void EventHelper::FireAndForget(Delegate^ d, ... array&lt;Object^&gt;^ args)
{
    try
    {
        if (d != nullptr)
        {                                           
            array&lt;Delegate^&gt;^ delegates = d-&gt;GetInvocationList();   

            for each(Delegate^ delegateMethod in delegates)
            {
                try
                {                               

                    DynamicInvokeAsyncProc^ evtDelegate = gcnew DynamicInvokeAsyncProc(this, &amp;EventHelper::OnTriggerEvent);
                    evtDelegate-&gt;BeginInvoke(delegateMethod, args, _dynamicAsyncResult, nullptr);    //FIX_DEC_09 Handle Leak               
                }
                catch (Exception^ ex)
                {                           
                }
            }
        }
        else
        {                   
        }
    }
    catch (Exception^ e)
    {                   
    }
}

void EventHelper::OnTriggerEvent(Delegate^ delegateMethod, array&lt;Object^&gt;^ args)
{
    try
    {                   
        // Dynamically invokes (late-bound) the method represented by the current delegate. 
        delegateMethod-&gt;DynamicInvoke(args);                
    }
    catch (Exception^ ex)
    {
        Log(LogMessageType::Error, "EventHelper.OnTriggerEvent", ex-&gt;ToString());
    }
}
</code></pre>
