FileStream.EndRead(IAsyncResult) Метод

Определение

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

public:
 override int EndRead(IAsyncResult ^ asyncResult);
public override int EndRead(IAsyncResult asyncResult);
override this.EndRead : IAsyncResult -> int
Public Overrides Function EndRead (asyncResult As IAsyncResult) As Integer

Параметры

asyncResult
IAsyncResult

Ссылка на ожидающий асинхронный запрос для ожидания.

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

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

Исключения

asyncResult равно null.

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

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

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

Примеры

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

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();
}
let endReadCallback (asyncResult: IAsyncResult) =
    let tempState = asyncResult.AsyncState :?> State
    let readCount = tempState.FStream.EndRead asyncResult

    let mutable i = 0
    let mutable errored = false

    while i < readCount do
        if tempState.ReadArray[i] <> tempState.WriteArray[i] then
            printfn "Error writing data."
            tempState.FStream.Close()
            errored <- true
            i <- readCount

        i <- i + 1

    printfn $"The data was written to {tempState.FStream.Name} and verified."
    tempState.FStream.Close()
    // Signal the main thread that the verification is finished.
    tempState.ManualEvent.Set() |> ignore
Private Shared Sub EndReadCallback(asyncResult As IAsyncResult)
     Dim tempState As State = _
         DirectCast(asyncResult.AsyncState, State)
     Dim readCount As Integer = _
         tempState.FStream.EndRead(asyncResult)

     Dim i As Integer = 0
     While(i < readCount)
         If(tempState.ReadArray(i) <> tempState.WriteArray(i))
             Console.WriteLine("Error writing data.")
             tempState.FStream.Close()
             Return
         End If
         i += 1
     End While

     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()
 End Sub

Комментарии

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

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

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

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

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

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