2

是否有任何属性或某种方法可以在线程与其创建的后台工作人员之间共享值?

我正在制作一个 SQL Server CLR 程序集,它在数据库中进行搜索 + 一些计算,我希望它是多线程的。我需要在调用线程和我创建的后台工作人员之间共享一些数据(从数据库的调用线程中读取的内容,我想传递给工作人员,以便他们计算我需要的内容)。

我不认为将类对象作为参数发送给 RunWorkerAsync 是一个好主意,因为在线程内部我使用 lock(item); 和 Interlocked.Add(ref itemCount, -1); 机制。

我还需要的是,如果进行另一个搜索调用,这两个调用堆栈中的值不会混淆。

谢谢!

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 回答