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
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.