デリゲート呼び出し中に

そのデリゲートに変更を加えても、その変更はデリゲートの呼び出しが全て完了するまで反映されない。

delegate void NonParamMethod();
static NonParamMethod TheEvent;
void Main(string[] args)
{
    TheEvent += Func1;
    TheEvent += Func2;

    TheEvent();
}
void Func1()
{
    Console.WriteLine("1");
    TheEvent -= Func2;
}
void Func2()
{
    Console.WriteLine("2");
}

よって、このコードの実行結果は

1
2

となる。