Condividi tramite


FileStream.ReadAsync Metodo

Definizione

Overload

ReadAsync(Memory<Byte>, CancellationToken)

Legge in modo asincrono una sequenza di byte dal flusso di file corrente e li scrive in un'area di memoria, fa avanzare la posizione all'interno del flusso di file in base al numero di byte letti e monitora le richieste di annullamento.

ReadAsync(Byte[], Int32, Int32, CancellationToken)

Legge in modo asincrono una sequenza di byte dal flusso di file corrente e li scrive in una matrice di byte a partire da un offset specificato, fa avanzare la posizione all'interno del flusso di file in base al numero di byte letti e monitora le richieste di annullamento.

ReadAsync(Memory<Byte>, CancellationToken)

Origine:
FileStream.cs
Origine:
FileStream.cs
Origine:
FileStream.cs

Legge in modo asincrono una sequenza di byte dal flusso di file corrente e li scrive in un'area di memoria, fa avanzare la posizione all'interno del flusso di file in base al numero di byte letti e monitora le richieste di annullamento.

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)

Parametri

buffer
Memory<Byte>

Buffer in cui scrivere i dati.

cancellationToken
CancellationToken

Token da monitorare per le richieste di annullamento. Il valore predefinito è None.

Restituisce

Attività che rappresenta l'operazione di lettura asincrona e che esegue il wrapping del numero totale di byte letti nel buffer. Il valore del risultato può essere minore del numero di byte richiesti se il numero di byte attualmente disponibili è minore di quelli richiesti o può essere pari a 0 (zero) se è stata raggiunta la fine del flusso.

Eccezioni

Il token di annullamento è stato annullato. Questa eccezione viene archiviata nell'attività restituita.

Esempio

Nell'esempio seguente viene illustrato come leggere da un file in modo asincrono.

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

Commenti

Il ReadAsync metodo consente di eseguire operazioni di file a elevato utilizzo di risorse senza bloccare il thread principale. Questa considerazione sulle prestazioni è particolarmente importante in un'app di Windows 8.x Store o in un'app desktop in cui un'operazione di flusso che richiede tempo può bloccare il thread dell'interfaccia utente e rendere l'app come se non funzioni. I metodi asincroni vengono usati insieme alle async parole chiave e await in Visual Basic e C#.

Utilizzare la proprietà per determinare se l'istanza CanRead corrente supporta la lettura.

Se l'operazione viene annullata prima del completamento, l'attività restituita contiene il TaskStatus.Canceled valore della Status proprietà. Se l'handle per il file viene eliminato, l'attività restituita contiene l'eccezione ObjectDisposedException nella Task.Exception proprietà .

Si applica a

ReadAsync(Byte[], Int32, Int32, CancellationToken)

Origine:
FileStream.cs
Origine:
FileStream.cs
Origine:
FileStream.cs

Legge in modo asincrono una sequenza di byte dal flusso di file corrente e li scrive in una matrice di byte a partire da un offset specificato, fa avanzare la posizione all'interno del flusso di file in base al numero di byte letti e monitora le richieste di annullamento.

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)

Parametri

buffer
Byte[]

Buffer in cui scrivere i dati.

offset
Int32

Offset dei byte in buffer da cui iniziare la scrittura dei dati dal flusso.

count
Int32

Numero massimo di byte da leggere.

cancellationToken
CancellationToken

Token da monitorare per le richieste di annullamento.

Restituisce

Attività che rappresenta l'operazione di lettura asincrona e che esegue il wrapping del numero totale di byte letti nel buffer. Il valore del risultato può essere minore del numero di byte richiesti se il numero di byte attualmente disponibili è minore di quelli richiesti o può essere pari a 0 (zero) se è stata raggiunta la fine del flusso.

Attributi

Eccezioni

buffer è null.

offset o count è negativo.

La somma di offset e count è maggiore della lunghezza del buffer.

Il flusso non supporta la lettura.

Il flusso è stato eliminato.

Il flusso è attualmente usato da un'operazione di lettura precedente.

Il token di annullamento è stato annullato. Questa eccezione viene archiviata nell'attività restituita.

Esempio

Nell'esempio seguente viene illustrato come leggere da un file in modo asincrono.

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

Commenti

Il ReadAsync metodo consente di eseguire operazioni di file a elevato utilizzo di risorse senza bloccare il thread principale. Questa considerazione sulle prestazioni è particolarmente importante in un'app di Windows 8.x Store o in un'app desktop in cui un'operazione di flusso che richiede tempo può bloccare il thread dell'interfaccia utente e rendere l'app come se non funzioni. I metodi asincroni vengono usati insieme alle async parole chiave e await in Visual Basic e C#.

Utilizzare la proprietà per determinare se l'istanza CanRead corrente supporta la lettura.

Se l'operazione viene annullata prima del completamento, l'attività restituita contiene il TaskStatus.Canceled valore della Task.Status proprietà. Se l'handle per il file viene eliminato, l'attività restituita contiene l'eccezione ObjectDisposedException nella Task.Exception proprietà .

Questo metodo archivia nell'attività che restituisce tutte le eccezioni non di utilizzo che la controparte sincrona del metodo può generare. Se un'eccezione viene archiviata nell'attività restituita, tale eccezione verrà generata quando l'attività è attesa. Le eccezioni di utilizzo, ad esempio ArgumentException, vengono comunque generate in modo sincrono. Per le eccezioni archiviate, vedere le eccezioni generate da Read(Byte[], Int32, Int32).

Vedi anche

Si applica a