我有一种方法,出于线程安全的原因,只能由特定线程使用。如果另一个线程试图使用它,我希望抛出异常。
public void UnsafeMethod()
{
if (CurrentThreadId != this.initialThreadId)
throw new SomeException("Can only be run on the special thread.");
// continue ...
}
如何在上面的代码中找到CurrentThreadId
?或者还有其他方法可以实现我想做的事情吗?
答案 0 :(得分:5)
主题。CurrentThread。ManagedThreadId
或者您可以只存储对线程对象本身的引用,并将其与Thread.CurrentThread进行比较。
答案 1 :(得分:4)
在创建时命名您的主题
System.Threading.Thread thread = new System.Threading.Thread(..);
thread.Name = "MySpecialThread";
并在需要特定于线程的代码的位置检查此条件:
if (System.Threading.Thread.CurrentThread.Name == "MySpecialThread")
{
//..
}
答案 2 :(得分:0)
我猜你需要一些静态变量(伪装的全局变量)来做这件事。这对我来说感觉不太好,但是将这个方法放在一个单独的对象中会让你拥有它。