我将使用匿名管道在两个进程之间发送命令。通常情况下一切都很好,但有时消费者接收到的命令会被截断,只有一半传递过来。
这是我发送命令的方法:
AnonymousPipeServerStream pipeServer = new AnonymousPipeServerStream(PipeDirection.Out, HandleInheritability.Inheritable);
StreamWriterpipeWriter = new StreamWriter(this.pipeServer) { AutoFlush = true };
pipeWriter.WriteLine(command);
这就是我阅读它们的方法:
AnonymousPipeClientStream pipeClient = new AnonymousPipeClientStream(PipeDirection.In, pipeId);
StreamReader pipeReader = new StreamReader(this.pipeClient);
string command = pipeReader.ReadLine();
该命令实际上是一个小的base64转换后的pdf文件,同时还含有一些额外的数据。将命令写入pipeWriter时,命令的格式是正确的(日志至少告诉我们这么多),而消费者收到的命令通常也是正确的。然而,偶尔会出现问题,消费者只能接收到部分命令。
当我们尝试重新发送相同的命令时,它会成功传输。重新发送命令将处理旧的消费者,但生产者将保持不变。
是否有任何已知原因导致此情况发生?我是否漏掉了一些显而易见的东西?