Named Pipes - асинхронный просмотр

Мне нужно найти способ получать уведомления, когда System.IO.Pipe.NamedPipeServerStream, открытый в асинхронном режиме, имеет больше данных для чтения на нем - WaitHandle был бы идеальным. Я не могу просто использовать BeginRead (), чтобы получить такой дескриптор, потому чтоВозможно, что мне может быть сообщено другим потоком, который хочет записать в канал, поэтому мне нужно снять блокировку на канале и дождаться завершения записи, а NamedPipeServerStream не имеет метода CancelAsync. Я также попытался вызвать BeginRead (), затем вызвать функцию win32 win32 на канале, если поток получает сигнал, но я неЯ не думаю, что это идеальное решение, потому что если CancelIO вызывается так же, как данные поступают и обрабатываются, они будут отброшены - я все еще хочу сохранить эти данные, но обработать их позже, после записи. Я подозреваю, что функция Win32 PeekNamedPipe может быть полезна, но яХотелось бы избежать необходимости постоянно опрашивать новые данные вместе с ним.

В случае, если вышеупомянутый текст немного неясен, здесьгрубо говоря, что яЯ хотел бы быть в состоянии сделать ...

NamedPipeServerStream pipe;
ManualResetEvent WriteFlag;
//initialise pipe
lock (pipe)
{
    //I wish this method existed
    WaitHandle NewDataHandle = pipe.GetDataAvailableWaithandle();
    Waithandle[] BreakConditions = new Waithandle[2];
    BreakConditions[0] = NewDataHandle;
    BreakConditions[1] = WriteFlag;
    int breakcode = WaitHandle.WaitAny(BreakConditions);
    switch (breakcode)
    {
        case 0:
            //do a read on the pipe
            break;
        case 1:
            //break so that we release the lock on the pipe
            break;
     }
}

Ответы на вопрос(2)

Ваш ответ на вопрос