2

スレッドとそれが作成するバックグラウンド ワーカーの間で値を共有する属性または方法はありますか?

データベースで検索を行い、いくつかの計算を行う SQL Server CLR アセンブリを作成していますが、それをマルチスレッドにしたいと考えています。呼び出し元のスレッドと作成したバックグラウンド ワーカーの間でデータを共有する必要があります (データベースから呼び出し元のスレッドから読み込まれたデータをワーカーに渡して、必要なものを計算できるようにしたい)。

スレッド内で lock(item); を使用しているため、RunWorkerAsync にパラメーターとしてクラス オブジェクトを送信することは良い考えではないと思います。および Interlocked.Add(ref itemCount, -1); 機構。

私が必要としているのは、別の検索呼び出しが行われた場合、これら 2 つの呼び出しスタックからの値が混同されないことです。

ありがとうございました!

4

1 に答える 1

0

必要に応じて ThreadStatic 変数を使用する代わりに、整数をパラメーターとして渡すことを検討できますが、生で渡す代わりに、ホルダー オブジェクトでラップします。

class ResultHolder
{
    public int result;
}

次に、オブジェクトを使用して int を参照によって保持できます。

Thread t = new Thread(Run);
var holder = new ResultHolder() { result = 0x92 }
t.Start(holder);

// Query the result
Console.WriteLine(holder.result);
于 2012-07-03T17:03:04.367 に答える