2

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

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

4

2 回答 2

2

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

于 2012-05-19T11:43:55.653 回答
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");
}
于 2012-05-19T11:44:28.000 回答