10

以下の2つのコードの違いは何ですか?2番目のものを使用して問題はありますか?

シナリオ1:

private void Log(Exception e)
{
    ThreadPool.QueueUserWorkItem(new WaitCallback(Log), e);
}

private void Log(object obj)
{
    Exception e = (Exception)obj;
    Logger.Log(e);
}

シナリオ2

private void Log(Exception e)
{
    ThreadPool.QueueUserWorkItem(
        (obj) => 
            {
                Logger.Log(e);
            });
}

シナリオ2では、例外をパラメーターとしてThreadPoolに渡していません。例外オブジェクトのスレッドマーシャリングはどのように発生しますか?問題がありますか?もしあれば、これを行うことの制限は何ですか?大きな利点は、任意の数のパラメーターを非常に簡単に渡すことができることです。

4

2 に答える 2

1

Lambda の代わりに、匿名メソッドで同じことを行うことができ、C# 2.0 でも機能することに注意してください。

ThreadPool.QueueUserWorkItem(delegate(Object e) 
    { 
        Logger.Log(e as Exception); 
    });
于 2009-05-08T18:03:49.690 に答える