I'm just trying to understand pipes in C#. I've a simple LinqPad script:
void Main() => Program.Main(null); // You can define other methods, fields, classes and namespaces here class Program { public static void Main(string[] args) { StartServer(); Task.Delay(1000).Wait(); //Client var client = new NamedPipeClientStream("PipesOfPiece"); client.Connect(); while (true) { string input = Guid.NewGuid().ToString(); if (String.IsNullOrEmpty(input)) break; var someBuffer = new byte[4]; client.Write(someBuffer, 0, someBuffer.Length); "Client 1st Write".Dump(); client.Write(someBuffer, 0, someBuffer.Length); "Client 2nd Write".Dump(); client.Read(someBuffer, 0, someBuffer.Length); "Client 1st Read".Dump(); } } static void StartServer() { Task.Factory.StartNew(() => { var server = new NamedPipeServerStream("PipesOfPiece"); server.WaitForConnection(); var someBuffer = new byte[4]; while (true) { server.Read(someBuffer, 0, someBuffer.Length); "Server 1st Read".Dump(); server.Write(someBuffer, 0, someBuffer.Length); "Server 1st Write".Dump(); } }); } } If I run above code I get following output:
Client 1st Write Server 1st Read So the second call on client.Write blocks forever. Can someone please explain me why a second call to write (in the same thread) causes the pipe to block forever?
Thx
https://stackoverflow.com/questions/66765594/namedpipeclientstream-write-blocks March 23, 2021 at 10:51PM
没有评论:
发表评论