名前付きパイプをリッスンしてユーザースペースから実行されるプログラムと対話するコンポーネントを持つWindowsサービスを作成しています。この回答のコードをマルチスレッドサーバー実装のベースとして使用しましたが、以下に再現されているように、タイトなループで呼び出されるProcessNextClientアクションから強いコードの臭いがします。別のストリームの開口部が名前付きパイプにいつ追加されるかを知るには、IOExceptionを繰り返しキャッチして再試行するよりも、本当に良い方法はありませんか?
public void ProcessNextClient()
{
try
{
NamedPipeServerStream pipeStream = new NamedPipeServerStream(PipeName, PipeDirection.InOut, 254);
pipeStream.WaitForConnection();
//Spawn a new thread for each request and continue waiting
Thread t = new Thread(ProcessClientThread);
t.Start(pipeStream);
}
catch (Exception e)
{//If there are no more avail connections (254 is in use already) then just keep looping until one is avail
}
}