父线程和子线程是否有任何ThreadStatic属性

时间:2012-05-24 22:47:56

标签: c# sql-server multithreading

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

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以考虑将整数作为参数传递,而不是将其作为参数传递,而不是使用您想要的ThreadStatic变量,而是将其包装在holder对象中。

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);