Partager via


FileStream.ReadAsync Méthode

Définition

Surcharges

ReadAsync(Memory<Byte>, CancellationToken)

Lit de façon asynchrone une séquence d’octets dans le flux de fichier actuel, les écrit dans une zone de mémoire, avance la position dans le flux de fichier du nombre d’octets lus et supervise les demandes d’annulation.

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

Lit de façon asynchrone une séquence d’octets dans le flux de fichier actuel, les écrit dans un tableau d’octets en commençant à un décalage spécifié, avance la position dans le flux de fichier du nombre d’octets lus et supervise les demandes d’annulation.

ReadAsync(Memory<Byte>, CancellationToken)

Source:
FileStream.cs
Source:
FileStream.cs
Source:
FileStream.cs

Lit de façon asynchrone une séquence d’octets dans le flux de fichier actuel, les écrit dans une zone de mémoire, avance la position dans le flux de fichier du nombre d’octets lus et supervise les demandes d’annulation.

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)

Paramètres

buffer
Memory<Byte>

Mémoire tampon où écrire les données.

cancellationToken
CancellationToken

Jeton pour surveiller les requêtes d'annulation. La valeur par défaut est None.

Retours

Tâche qui représente l’opération de lecture asynchrone et encapsule le nombre total d’octets lus dans la mémoire tampon. La valeur du résultat peut être inférieure au nombre d'octets demandés si le nombre d'octets actuellement disponibles est inférieur au nombre demandé, ou elle peut avoir la valeur 0 (zéro) si la fin du flux a été atteinte.

Exceptions

Le jeton d’annulation a été annulé. Cette exception est stockée dans la tâche retournée.

Exemples

L’exemple suivant montre comment lire à partir d’un fichier de manière asynchrone.

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

Remarques

La ReadAsync méthode vous permet d’effectuer des opérations de fichier nécessitant beaucoup de ressources sans bloquer le thread main. Cette considération de performance est particulièrement importante dans une application Windows 8.x Store ou une application de bureau où une longue opération de flux peut bloquer le thread d'interface utilisateur et faire que l'application s'affiche comme si elle ne fonctionnait pas. Les méthodes asynchrones sont utilisées conjointement avec les async mots clés et await dans Visual Basic et C#.

Utilisez la CanRead propriété pour déterminer si le instance actuel prend en charge la lecture.

Si l’opération est annulée avant qu’elle ne se termine, la tâche retournée contient la TaskStatus.Canceled valeur de la Status propriété. Si le handle du fichier est supprimé, la tâche retournée contient l’exception ObjectDisposedException dans la Task.Exception propriété .

S’applique à

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

Source:
FileStream.cs
Source:
FileStream.cs
Source:
FileStream.cs

Lit de façon asynchrone une séquence d’octets dans le flux de fichier actuel, les écrit dans un tableau d’octets en commençant à un décalage spécifié, avance la position dans le flux de fichier du nombre d’octets lus et supervise les demandes d’annulation.

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)

Paramètres

buffer
Byte[]

Mémoire tampon où écrire les données.

offset
Int32

Dans buffer, décalage d'octet auquel commencer l'écriture des données à partir du flux.

count
Int32

Nombre maximal d'octets à lire.

cancellationToken
CancellationToken

Jeton pour surveiller les requêtes d'annulation.

Retours

Tâche qui représente l’opération de lecture asynchrone et encapsule le nombre total d’octets lus dans la mémoire tampon. La valeur du résultat peut être inférieure au nombre d'octets demandés si le nombre d'octets actuellement disponibles est inférieur au nombre demandé, ou elle peut avoir la valeur 0 (zéro) si la fin du flux a été atteinte.

Attributs

Exceptions

buffer a la valeur null.

offset ou count est un nombre négatif.

La somme de offset et count est supérieure à la longueur de la mémoire tampon.

Le flux ne prend pas en charge la lecture.

Le flux a été supprimé.

Le flux est actuellement utilisé par une opération de lecture antérieure.

Le jeton d’annulation a été annulé. Cette exception est stockée dans la tâche retournée.

Exemples

L’exemple suivant montre comment lire à partir d’un fichier de manière asynchrone.

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

Remarques

La ReadAsync méthode vous permet d’effectuer des opérations de fichier nécessitant beaucoup de ressources sans bloquer le thread main. Cette considération de performance est particulièrement importante dans une application Windows 8.x Store ou une application de bureau où une longue opération de flux peut bloquer le thread d'interface utilisateur et faire que l'application s'affiche comme si elle ne fonctionnait pas. Les méthodes asynchrones sont utilisées conjointement avec les async mots clés et await dans Visual Basic et C#.

Utilisez la CanRead propriété pour déterminer si le instance actuel prend en charge la lecture.

Si l’opération est annulée avant qu’elle ne se termine, la tâche retournée contient la TaskStatus.Canceled valeur de la Task.Status propriété. Si le handle du fichier est supprimé, la tâche retournée contient l’exception ObjectDisposedException dans la Task.Exception propriété .

Cette méthode stocke dans la tâche toutes les exceptions de non-utilisation que l’équivalent synchrone de la méthode peut lever. Si une exception est stockée dans la tâche retournée, cette exception sera levée lorsque la tâche est attendue. Les exceptions d’utilisation, telles que ArgumentException, sont toujours levées de manière synchrone. Pour connaître les exceptions stockées, consultez les exceptions levées par Read(Byte[], Int32, Int32).

Voir aussi

S’applique à