FileStream.EndRead(IAsyncResult) Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Väntar på att den väntande asynkrona läsåtgärden ska slutföras. (Överväg att använda ReadAsync(Byte[], Int32, Int32, CancellationToken) i stället.)
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
Parametrar
- asyncResult
- IAsyncResult
Referensen till den väntande asynkrona begäran att vänta på.
Returer
Antalet byte som lästs från strömmen, mellan 0 och antalet byte som du begärde. Strömmar returnerar endast 0 i slutet av strömmen, annars bör de blockeras tills minst 1 byte är tillgängligt.
Undantag
asyncResult är null.
Det här IAsyncResult objektet skapades inte genom att anropa BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) den här klassen.
EndRead(IAsyncResult) anropas flera gånger.
Strömmen stängs eller så har ett internt fel inträffat.
Exempel
Det här kodexemplet är en del av ett större exempel som tillhandahålls FileStream(String, FileMode, FileAccess, FileShare, Int32, Boolean) för konstruktorn.
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
Kommentarer
I .NET Framework 4 och tidigare versioner måste du använda metoder som BeginRead och EndRead för att implementera asynkrona filåtgärder. Dessa metoder är fortfarande tillgängliga i .NET Framework 4.5 för att stödja äldre kod. De nya asynkrona metoderna, till exempel ReadAsync, WriteAsync, CopyToAsync och FlushAsync, hjälper dig att implementera asynkrona filåtgärder enklare.
EndRead måste anropas exakt för varje anrop till BeginRead. Om du inte avslutar en läsprocess innan du påbörjar en annan läsning kan det orsaka oönskade beteenden, till exempel dödläge.
Den här metoden åsidosätter EndRead.
EndRead kan anropas på var IAsyncResult från BeginRead. Samtal EndRead visar hur många byte som lästes från strömmen. EndRead blockeras tills I/O-åtgärden har slutförts.