FileStream.EndRead(IAsyncResult) Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
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.