【发布时间】:2014-10-11 01:42:03
【问题描述】:
我似乎找不到一个优雅的解决方案来同步下面的代码。我记得曾经做过类似的事情,但现在我的大脑一片空白。
我需要保护没有两个线程会从套接字读取,始终只有一个线程等待 BeginRead。当我以这种方式使用 Mutex 时,会出现 SyncronizationError。
class Program
{
TcpClient client = new TcpClient();
public readonly object loker = new object();
public void BeginRead()
{
if (!Mutex.TryEnter(loker))
{
return;
}
client.GetStream().BeginRead(..., Read_Callback);
}
private void Read_Callback(IAsyncResult ar)
{
client.GetStream().EndRead(ar);
Mutex.Exit(loker);
BeginRead();
}
static void Main(string[] args)
{
BeginRead();
}
}
【问题讨论】:
-
这将有助于了解哪个对象引发了异常,以及它在您的代码中被抛出的位置。
-
您使用的是哪个 .NET 框架版本?
-
我认为您不需要锁定机制。 BeginRead 和 CallBack 可以在不同的线程中运行,但不能同时运行。他们一个接一个地跑。
标签: c# multithreading asynchronous synchronization