Прочитать на английском

Поделиться через


FileStream.EndRead(IAsyncResult) Метод

Определение

Ожидает завершения отложенной асинхронной операции чтения. (Рекомендуется использовать ReadAsync(Byte[], Int32, Int32, CancellationToken).)

C#
public override int EndRead (IAsyncResult asyncResult);

Параметры

asyncResult
IAsyncResult

Ссылка на ожидаемый отложенный асинхронный запрос.

Возвращаемое значение

Число байтов, считанных из потока, находится между 0 и числом запрошенных байтов. Потоки возвращают 0 только в конце потока, в противном случае они должны блокироваться, пока не будет доступен по крайней мере 1 байт.

Исключения

asyncResult имеет значение null.

Этот объект IAsyncResult не был создан путем вызова BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) для данного класса.

EndRead(IAsyncResult) вызывается несколько раз.

Поток закрыт, или произошла внутренняя ошибка.

Примеры

Этот пример кода является частью более крупного примера, предоставленного для конструктора FileStream(String, FileMode, FileAccess, FileShare, Int32, Boolean) .

C#
static void EndReadCallback(IAsyncResult asyncResult)
{
    State tempState = (State)asyncResult.AsyncState;
    int readCount = tempState.FStream.EndRead(asyncResult);

    int i = 0;
    while(i < readCount)
    {
        if(tempState.ReadArray[i] != tempState.WriteArray[i++])
        {
            Console.WriteLine("Error writing data.");
            tempState.FStream.Close();
            return;
        }
    }
    Console.WriteLine("The data was written to {0} and verified.",
        tempState.FStream.Name);
    tempState.FStream.Close();

    // Signal the main thread that the verification is finished.
    tempState.ManualEvent.Set();
}

Комментарии

В платформа .NET Framework 4 и более ранних версиях для реализации асинхронных операций с файлами необходимо использовать такие методы, как BeginRead и EndRead . Эти методы по-прежнему доступны в платформа .NET Framework 4.5 для поддержки устаревшего кода. Однако новые асинхронные методы, такие как ReadAsync, WriteAsync, CopyToAsyncи FlushAsync, упрощают реализацию асинхронных операций с файлами.

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

Этот метод переопределяет метод EndRead.

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

Применяется к

Продукт Версии
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

См. также раздел