FileStream.EndRead(IAsyncResult) Yöntem

Tanım

Bekleyen zaman uyumsuz okuma işleminin tamamlanmasını bekler. (Bunun yerine kullanmayı ReadAsync(Byte[], Int32, Int32, CancellationToken) düşünün.)

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

Parametreler

asyncResult
IAsyncResult

Beklenmesi gereken bekleyen zaman uyumsuz istek başvurusu.

Döndürülenler

0 ile istediğiniz bayt sayısı arasında akıştan okunan bayt sayısı. Akışlar yalnızca akışın sonunda 0 döndürür, aksi takdirde en az 1 bayt kullanılabilir olana kadar engellemeleri gerekir.

Özel durumlar

asyncResult, null'e eşittir.

Bu IAsyncResult nesne, bu sınıfta çağrılarak BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) oluşturulmadı.

EndRead(IAsyncResult) birden çok kez çağrılır.

Akış kapatıldı veya bir iç hata oluştu.

Örnekler

Bu kod örneği, oluşturucu için FileStream(String, FileMode, FileAccess, FileShare, Int32, Boolean) sağlanan daha büyük bir örneğin parçasıdır.

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

Açıklamalar

.NET Framework 4 ve önceki sürümlerinde, zaman uyumsuz dosya işlemleri uygulamak için ve BeginRead gibi EndRead yöntemleri kullanmanız gerekir. Bu yöntemler eski kodu desteklemek için .NET Framework 4.5'te hala kullanılabilir; ancak ReadAsync, WriteAsync, CopyToAsync ve FlushAsync gibi yeni zaman uyumsuz yöntemler zaman uyumsuz dosya işlemlerini daha kolay uygulamanıza yardımcı olur.

EndRead için yapılan her çağrı BeginReadiçin tam olarak çağrılmalıdır. Başka bir okuma işlemine başlamadan önce bir okuma işleminin sonlandırılamaması kilitlenme gibi istenmeyen davranışlara neden olabilir.

Bu yöntem geçersiz kılar EndRead.

EndRead' den BeginReadher IAsyncResult üzerinde çağrılabilir. Çağrısı EndRead , akıştan kaç bayt okundu olduğunu bildirir. EndRead G/Ç işlemi tamamlanana kadar engellenir.

Şunlara uygulanır

Ayrıca bkz.