FileStream.EndRead(IAsyncResult) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Espera a que se complete la operación asincrónica de lectura que se encuentra pendiente. (Considere usar ReadAsync(Byte[], Int32, Int32, CancellationToken) en su lugar).
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
Parámetros
- asyncResult
- IAsyncResult
Referencia a la solicitud asincrónica pendiente a la que se debe esperar.
Devoluciones
Número de bytes leídos de la secuencia, que se encuentra entre 0 y el número de bytes solicitado. Las secuencias solo devuelven 0 al final de la secuencia; de lo contrario, se deben bloquear hasta que haya al menos 1 byte disponible.
Excepciones
asyncResult
es null
.
Este objeto IAsyncResult no se creó mediante una llamada a BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) en esta clase.
Se llama a EndRead(IAsyncResult) varias veces.
La secuencia está cerrada o se produjo un error interno.
Ejemplos
Este ejemplo de código forma parte de un ejemplo más grande proporcionado para el FileStream(String, FileMode, FileAccess, FileShare, Int32, Boolean) constructor.
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
Comentarios
En .NET Framework 4 y versiones anteriores, tiene que usar métodos como BeginRead e EndRead implementar operaciones de archivo asincrónicas. Estos métodos siguen estando disponibles en .NET Framework 4.5 para admitir código heredado; sin embargo, los nuevos métodos asincrónicos, como ReadAsync, WriteAsync, CopyToAsyncy FlushAsync, le ayudan a implementar operaciones de archivos asincrónicas más fácilmente.
EndRead se debe llamar exactamente para cada llamada a BeginRead. Si no finaliza un proceso de lectura antes de comenzar otra lectura, puede provocar un comportamiento no deseado, como interbloqueo.
Este método invalida EndRead.
EndRead se puede llamar a en cada IAsyncResult desde BeginRead. Al llamar EndRead a , se indica cuántos bytes se leyeron desde la secuencia. EndRead se bloqueará hasta que se haya completado la operación de E/S.