Как узнать количество прочитанных байтов при асинхронном чтении? - PullRequest
1 голос
/ 30 марта 2011

Используя C #, как я могу вернуть количество байтов, прочитанных из функции, в которой я вызываю EndRead?

т.е.:

x.BeginRead (...ReadProc..);
// how can I get the number of bytes read here?

ReadProc (IAsyncResult ar)
{
    int numBytesRead = EndRead ();
    // how can I return numBytesRead?

}

Ответы [ 2 ]

2 голосов
/ 30 марта 2011

Если вам нужно вернуться туда, где вы вызвали BeginRead, вам не хватает трюка;Вы могли бы также просто позвонить Read.Весь смысл асинхронности в том, что вы обычно обрабатываете данные отключенным способом.

Однако вы также можете вызвать EndRead в исходном методе, если все, что вы хотите сделать, - это что-то еще пока он читает.Только не указывайте обратный звонок.

2 голосов
/ 30 марта 2011

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

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

...