FileStream.ReadAsync 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í.
Sobrecargas
ReadAsync(Memory<Byte>, CancellationToken) |
Lee de forma asincrónica una secuencia de bytes en la secuencia de archivo actual y los escribe en una región de memoria, avanza la posición dentro de la secuencia de archivo según el número de bytes leídos y supervisa las solicitudes de cancelación. |
ReadAsync(Byte[], Int32, Int32, CancellationToken) |
Lee de forma asincrónica una secuencia de bytes desde la secuencia de archivo actual y los escribe en una matriz de bytes a partir de una posición especificada, avanza la posición en la secuencia de archivo según el número de bytes leídos y supervisa las solicitudes de cancelación. |
ReadAsync(Memory<Byte>, CancellationToken)
- Source:
- FileStream.cs
- Source:
- FileStream.cs
- Source:
- FileStream.cs
Lee de forma asincrónica una secuencia de bytes en la secuencia de archivo actual y los escribe en una región de memoria, avanza la posición dentro de la secuencia de archivo según el número de bytes leídos y supervisa las solicitudes de cancelación.
public override System.Threading.Tasks.ValueTask<int> ReadAsync (Memory<byte> buffer, System.Threading.CancellationToken cancellationToken = default);
override this.ReadAsync : Memory<byte> * System.Threading.CancellationToken -> System.Threading.Tasks.ValueTask<int>
Public Overrides Function ReadAsync (buffer As Memory(Of Byte), Optional cancellationToken As CancellationToken = Nothing) As ValueTask(Of Integer)
Parámetros
- cancellationToken
- CancellationToken
Token para supervisar solicitudes de cancelación. El valor predeterminado es None.
Devoluciones
Tarea que representa la operación de lectura asincrónica y ajusta el número total de bytes leídos en el búfer. El valor del resultado puede ser menor que el número de bytes solicitados si el número de bytes disponibles actualmente es menor que el número solicitado o puede ser 0 (cero) si se ha llegado al final de la secuencia.
Excepciones
Se canceló el token de cancelación. Esta excepción se almacena en la tarea devuelta.
Ejemplos
En el ejemplo siguiente se muestra cómo leer de un archivo de forma asincrónica.
using System;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.IO;
namespace WpfApplication1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private async void Button_Click(object sender, RoutedEventArgs e)
{
string filename = @"c:\Temp\userinputlog.txt";
byte[] result;
using (FileStream SourceStream = File.Open(filename, FileMode.Open))
{
result = new byte[SourceStream.Length];
await SourceStream.ReadAsync(result, 0, (int)SourceStream.Length);
}
UserInput.Text = System.Text.Encoding.ASCII.GetString(result);
}
}
}
open System.Text
open System.IO
let read () =
task {
let filename = @"c:\Temp\userinputlog.txt"
use sourceStream = File.Open(filename, FileMode.Open)
let length = int sourceStream.Length
let result = Array.zeroCreate length
let! _ = sourceStream.ReadAsync(result, 0, length)
return Encoding.ASCII.GetString result
}
let main =
task {
let! text = read ()
printfn $"{text}"
}
main.Wait()
Imports System.IO
Imports System.Text
Class MainWindow
Private Async Sub Button_Click(sender As Object, e As RoutedEventArgs)
Dim filename As String = "c:\Temp\userinputlog.txt"
Dim result As Byte()
Using SourceStream As FileStream = File.Open(filename, FileMode.Open)
result = New Byte(SourceStream.Length - 1) {}
Await SourceStream.ReadAsync(result, 0, CType(SourceStream.Length, Integer))
End Using
UserInput.Text = System.Text.Encoding.ASCII.GetString(result)
End Sub
End Class
Comentarios
El ReadAsync
método permite realizar operaciones de archivos que consumen muchos recursos sin bloquear el subproceso principal. Esta consideración de rendimiento es especialmente importante en una aplicación de la Tienda Windows 8.x o una aplicación de escritorio en que una operación de streaming prolongada puede bloquear el subproceso de interfaz de usuario y hacer que parezca que una aplicación ha dejado de responder. Los métodos asincrónicos se usan junto con las async
palabras clave y await
en Visual Basic y C#.
Use la CanRead propiedad para determinar si la instancia actual admite la lectura.
Si la operación se cancela antes de completarse, la tarea devuelta contiene el TaskStatus.Canceled valor de la Status propiedad . Si el identificador del archivo se elimina, la tarea devuelta contiene la ObjectDisposedException excepción en la Task.Exception propiedad .
Se aplica a
ReadAsync(Byte[], Int32, Int32, CancellationToken)
- Source:
- FileStream.cs
- Source:
- FileStream.cs
- Source:
- FileStream.cs
Lee de forma asincrónica una secuencia de bytes desde la secuencia de archivo actual y los escribe en una matriz de bytes a partir de una posición especificada, avanza la posición en la secuencia de archivo según el número de bytes leídos y supervisa las solicitudes de cancelación.
public:
override System::Threading::Tasks::Task<int> ^ ReadAsync(cli::array <System::Byte> ^ buffer, int offset, int count, System::Threading::CancellationToken cancellationToken);
public override System.Threading.Tasks.Task<int> ReadAsync (byte[] buffer, int offset, int count, System.Threading.CancellationToken cancellationToken);
[System.Runtime.InteropServices.ComVisible(false)]
public override System.Threading.Tasks.Task<int> ReadAsync (byte[] buffer, int offset, int count, System.Threading.CancellationToken cancellationToken);
override this.ReadAsync : byte[] * int * int * System.Threading.CancellationToken -> System.Threading.Tasks.Task<int>
[<System.Runtime.InteropServices.ComVisible(false)>]
override this.ReadAsync : byte[] * int * int * System.Threading.CancellationToken -> System.Threading.Tasks.Task<int>
Public Overrides Function ReadAsync (buffer As Byte(), offset As Integer, count As Integer, cancellationToken As CancellationToken) As Task(Of Integer)
Parámetros
- buffer
- Byte[]
El búfer en el que se escriben los datos.
- offset
- Int32
Posición de desplazamiento en bytes de buffer
donde se comienza a escribir los datos de la secuencia.
- count
- Int32
Número máximo de bytes que se pueden leer.
- cancellationToken
- CancellationToken
Token para supervisar solicitudes de cancelación.
Devoluciones
Tarea que representa la operación de lectura asincrónica y ajusta el número total de bytes leídos en el búfer. El valor del resultado puede ser menor que el número de bytes solicitados si el número de bytes disponibles actualmente es menor que el número solicitado o puede ser 0 (cero) si se ha llegado al final de la secuencia.
- Atributos
Excepciones
buffer
es null
.
offset
o count
es negativo.
La suma de offset
y count
es mayor que la longitud del búfer.
La secuencia no admite lectura.
Se ha eliminado la secuencia.
Una operación de lectura anterior está usando actualmente la secuencia.
Se canceló el token de cancelación. Esta excepción se almacena en la tarea devuelta.
Ejemplos
En el ejemplo siguiente se muestra cómo leer de un archivo de forma asincrónica.
using System;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.IO;
namespace WpfApplication1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private async void Button_Click(object sender, RoutedEventArgs e)
{
string filename = @"c:\Temp\userinputlog.txt";
byte[] result;
using (FileStream SourceStream = File.Open(filename, FileMode.Open))
{
result = new byte[SourceStream.Length];
await SourceStream.ReadAsync(result, 0, (int)SourceStream.Length);
}
UserInput.Text = System.Text.Encoding.ASCII.GetString(result);
}
}
}
open System.Text
open System.IO
let read () =
task {
let filename = @"c:\Temp\userinputlog.txt"
use sourceStream = File.Open(filename, FileMode.Open)
let length = int sourceStream.Length
let result = Array.zeroCreate length
let! _ = sourceStream.ReadAsync(result, 0, length)
return Encoding.ASCII.GetString result
}
let main =
task {
let! text = read ()
printfn $"{text}"
}
main.Wait()
Imports System.IO
Imports System.Text
Class MainWindow
Private Async Sub Button_Click(sender As Object, e As RoutedEventArgs)
Dim filename As String = "c:\Temp\userinputlog.txt"
Dim result As Byte()
Using SourceStream As FileStream = File.Open(filename, FileMode.Open)
result = New Byte(SourceStream.Length - 1) {}
Await SourceStream.ReadAsync(result, 0, CType(SourceStream.Length, Integer))
End Using
UserInput.Text = System.Text.Encoding.ASCII.GetString(result)
End Sub
End Class
Comentarios
El ReadAsync
método permite realizar operaciones de archivos que consumen muchos recursos sin bloquear el subproceso principal. Esta consideración de rendimiento es especialmente importante en una aplicación de la Tienda Windows 8.x o una aplicación de escritorio en que una operación de streaming prolongada puede bloquear el subproceso de interfaz de usuario y hacer que parezca que una aplicación ha dejado de responder. Los métodos asincrónicos se usan junto con las async
palabras clave y await
en Visual Basic y C#.
Use la CanRead propiedad para determinar si la instancia actual admite la lectura.
Si la operación se cancela antes de completarse, la tarea devuelta contiene el TaskStatus.Canceled valor de la Task.Status propiedad . Si el identificador del archivo se elimina, la tarea devuelta contiene la ObjectDisposedException excepción en la Task.Exception propiedad .
Este método almacena en la tarea que devuelve todas las excepciones que no son de uso que puede producir el homólogo sincrónico del método. Si se almacena una excepción en la tarea devuelta, esa excepción se producirá cuando se espere a la tarea. Las excepciones de uso, como ArgumentException, se siguen produciendo de forma sincrónica. Para ver las excepciones almacenadas, vea las excepciones producidas por Read(Byte[], Int32, Int32).