Aracılığıyla paylaş


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

Akıştan okunan bayt sayısı (0 ile istediğiniz bayt sayısı arasında). 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 değeridir.

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 = dynamic_cast<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();
   }


public:
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ümlerde, zaman uyumsuz dosya işlemleri uygulamak için ve EndRead gibi BeginRead yöntemleri kullanmanız gerekir. Bu yöntemler, eski kodu desteklemek için .NET Framework 4.5'te hala kullanılabilir; ancak , WriteAsync, CopyToAsyncve FlushAsyncgibi ReadAsyncyeni 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 her IAsyncResult üzerinde BeginReadçağrılabilir. Çağrısı EndRead , akıştan kaç bayt okunmuş olduğunu bildirir. EndRead G/Ç işlemi tamamlanana kadar engeller.

Şunlara uygulanır

Ayrıca bkz.