Cat*_*kul 22 .net c# multithreading attributes
我发现"ThreadStatic"属性最近非常有用,但现在我想要一个"ThreadLocal"类型属性,它允许我在每个线程的基础上拥有非静态数据成员.
现在我知道这会产生一些非平凡的影响,但是:
C#/ .net中是否已经内置了这样的东西? 或者因为到目前为止它的答案是否定的(对于.net <4.0),是否有一个常用的实现?
我可以想出一种合理的方式来实现它,但只会使用已经存在的东西(如果有的话).
稻草人将实现什么我要找的,如果它已经不存在例子:
class Foo
{
[ThreadStatic]
static Dictionary<Object,int> threadLocalValues = new Dictionary<Object,int>();
int defaultValue = 0;
int ThreadLocalMember
{
get
{
int value = defaultValue;
if( ! threadLocalValues.TryGetValue(this, out value) )
{
threadLocalValues[this] = value;
}
return value;
}
set { threadLocalValues[this] = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
请原谅任何C#无知.我是一名C++开发人员,最近才开始涉及C#和.net的更有趣的功能
我只限于.net 3.0和3.5(项目已经/将很快转移到3.5).
具体的用例是特定于线程的回调列表(使用虚构的[ThreadLocal]属性) a la:
class NonSingletonSharedThing
{
[ThreadLocal] List<Callback> callbacks;
public void ThreadLocalRegisterCallback( Callback somecallback )
{
callbacks.Add(somecallback);
}
public void ThreadLocalDoCallbacks();
{
foreach( var callback in callbacks )
callback.invoke();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11648 次 |
| 最近记录: |