所以,以下代码引发了异常。我已经将异常详细信息放在了下面,但我认为这是由于释放锁的线程与启动锁的线程不同导致的。我想这样做可能会让我的主线程继续运行,而写入则排队并发生。
首先,我想知道是否有办法可以做到这一点?其次,这应该这样做还是一个坏计划?我已经看过ManualResetEvent、Monitor和Mutex,它们似乎都可以做到这一点。请注意,这是用于网络服务器的,这是我第一次编写多线程、潜在高流量的服务器。
异常:第一次调用发送(及其回调)时抛出。
System.ApplicationException在mutex.ReleaseMutex()上。"从未同步的代码块中调用了对象同步方法。"
首先,我想知道是否有办法可以做到这一点?其次,这应该这样做还是一个坏计划?我已经看过ManualResetEvent、Monitor和Mutex,它们似乎都可以做到这一点。请注意,这是用于网络服务器的,这是我第一次编写多线程、潜在高流量的服务器。
异常:第一次调用发送(及其回调)时抛出。
System.ApplicationException在mutex.ReleaseMutex()上。"从未同步的代码块中调用了对象同步方法。"
public void SendAsync(byte[] packet)
{
mutex.WaitOne();
client.GetStream().BeginWrite(packet, 0, packet.Length, WriteCallback, null);
}
private void WriteCallback(IAsyncResult ar)
{
client.GetStream().EndWrite(ar);
mutex.ReleaseMutex();
Console.WriteLine("Sent Data to " + RemoteEndPoint);
}