我有这样的服务器:
public void Run() {
while (true) {
if (curThreads < maxThreads) {
curThreads++;
AsyncCallback callback = new AsyncCallback (ProcessRequest);
client.BeginReceive (callback, this);
}
}
}
回调是:
public static void ProcessRequest(IAsyncResult result) {
LogSink lg = result.AsyncState as LogSink;
IPEndPoint endPoint = new IPEndPoint (IPAddress.Any, 0);
byte[] message = lg.client.EndReceive (result, ref endPoint);
String str = Encoding.ASCII.GetString (message, 0, message.Length);
Console.WriteLine(str);
lg.curThreads--;
}
现在,如果我将所有内容限制为1个线程,它的效果非常好......我正在发送的字符串正确接收。如果我使用10个线程的限制(10个异步接收),那么我会收到一个空值的字节数组。缓冲区的大小是正确的(我发送的字符串的大小),但所有字符都为空。
奇怪的是,这是Mac OS X中Mono的行为。它似乎适用于使用Visual Studio的Windows机器。
感谢您的任何见解。
编辑1:我刚刚在Windows 7虚拟机上安装了Visual Studio 2010 Express,当使用Microsoft编译器编译时,我的代码在Windows下完美运行。这可能是单声道问题吗?还是Mac OS X的问题?