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

本文关键字:线程 任何 静态 属性 是否 | 更新日期: 2023-09-27 18:35:27

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

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

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

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

谢谢!

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

与其像你想要的那样使用 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);