NamedPipeServerStream.EndWaitForConnection () просто зависает при использовании

Я впервые пытаюсь использовать именованные каналы. В документации MS, найденной здесь , говорится, что:

EndWaitForConnection должен вызываться ровно один раз для каждого вызова BeginWaitForConnection.

Я пытаюсь быть хорошим программистом и следовать документации, но EndWaitForConnection () просто зависает на неопределенный срок, когда я его использую.

Я сократил свой код до минимума, чтобы посмотреть, смогу ли я изолировать проблему, но не играю в кости. Я извлек следующий код из написанного мной класса. Я изменил его так, что он начинает ожидание соединения по каналу, а затем немедленно пытается прекратить ожидание соединения по каналу:

private void WaitForConnectionCallBack(IAsyncResult result)
{

}

public void Start()
{
    var tempPipe = new NamedPipeServerStream("TempPipe",
                                             PipeDirection.In,
                                             254, 
                                             PipeTransmissionMode.Message,
                                             PipeOptions.Asynchronous);

    IAsyncResult result = tempPipe.BeginWaitForConnection(
                                    new AsyncCallback(WaitForConnectionCallBack), this);

    tempPipe.EndWaitForConnection(result);  // <----- Hangs on this line right here
}

1) Почему зависает на EndWaitForConnection () ? Если я хочу выключить свой сервер до получения соединения, как я могу по существу отменить этот обратный вызов BeginWaitForConnection () ?

2) Предположим, у меня не было вышеупомянутой проблемы.Что произойдет, если 2 клиента попытаются очень быстро подключиться к моему именованному каналу?

Получу ли я вызов обратного вызова для каждого из них, или мне нужно дождаться получения первого уведомления о подключении, затем быстро вызвать EndWaitForConnection () , затем WaitForConnectionCallBack () еще раз, чтобы снова начать прислушиваться к следующему клиенту?

Последнее кажется мне состоянием гонки, потому что я не могу настроить прослушиватель соединения достаточно быстро.

10
задан ΩmegaMan 1 April 2017 в 18:31
поделиться