0

プール スレッドを開始するヘルパー関数を書きたいのですが、同じプール スレッドでstart実際のバックグラウンド処理が開始される前にいくつかのコードも追加します。そのため、バックグラウンド スレッドは追加の作業を行う必要があります。私は非常に頻繁に呼び出し、追加のコードは変更される可能性があります。だから私はプールスレッドのためのちょっとした工場を作りたいと思っていました。start

それは可能でしょうか?はいの場合、コードをスレッドに「注入」するにはどうすればよいですか?

私はこれを試しました:

class Program
{
    private static void test()
    {
        Console.WriteLine("hello world");
    }

    private static void start1(Action param1)
    {
        ThreadPool.QueueUserWorkItem(o =>
            {
                // extra work is here
                param1.Invoke(); // starts another subthread ?
            });
    }

    private static void start2(WaitCallback param1)
    {
        ThreadPool.QueueUserWorkItem(param1);
    }

    static void Main(string[] args)
    {
        start1(new Action(test));
        start2(o => { test(); });

        Console.ReadKey();
    }
}
4

2 に答える 2

1
    ThreadPool.QueueUserWorkItem(o =>
        {
            ExtraWork();
            param1.Invoke();
        });

と同等です

    ThreadPool.QueueUserWorkItem(o =>
        {
            ExtraWork();
            param1();
        });

デリゲートを呼び出しても、新しいスレッドは開始されません。(なぜそうなると思いますか?) したがって、このコードはそのままで問題なく動作します。2 つの関数を順番に呼び出します。

于 2013-10-24T11:54:33.433 に答える