有没有办法只有在从特定线程调用它时才会发生某些事情?

时间:2012-05-19 11:36:10

标签: c#

好的,这是一个非常奇怪的问题,但情况就是这样。我有一个我一直在研究的通信库,其众多功能之一是后台线程,它接受来自套接字的所有传入数据包,并根据需要将它们分发出来。在最简单的形式中,您可以请求或响应请求。多个线程可以通过发送请求使用此库在同一套接字上发送,然后在响应到达时等待来自后台线程的信号(事件)。

定义与后台线程关联的委托,以处理传入请求的情况。缺点是,您可以尝试从该代理发送请求。由于这与后台接收线程在同一个线程上,因此它会变为死锁(线程将阻塞,等待其响应,这将永远不会发生)。这些是我和大多数人都知道要避免的情况,但我希望有办法抛出异常,或者可能有编译时间检查阻止程序员尝试调用某个方法,即发送请求的方法,来自处理接收的线程。

2 个答案:

答案 0 :(得分:2)

您可以使用Thread.CurrentThread.ManagedThreadId来识别当前正在执行的线程,并通过与目标线程的ID进行比较来做出决定。

答案 1 :(得分:2)

您可以命名您的主题

Thread.CurrentThread.Name = "Any name you like";

或者您可以创建一个静态字段来保存您的线程ID

SomeClass.RequestSenderThreadId = Thread.CurrentThread.ManagedThreadId;

然后在你的方法中

if(SomeClass.RequestSenderThreadId == Thread.CurrentThread.ManagedThreadId)
{
    throw new OperationException("You cant use this method in this thread");
}