FileStream.ReadAsync Methode

Definitie

Overloads

Name Description
ReadAsync(Memory<Byte>, CancellationToken)

Asynchroon leest een reeks bytes uit de huidige bestandsstroom en schrijft deze naar een geheugenregio, verplaatst de positie in de bestandsstroom door het aantal bytes lezen en bewaakt annuleringsaanvragen.

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

Asynchroon leest een reeks bytes uit de huidige bestandsstroom en schrijft deze naar een bytematrix die begint bij een opgegeven offset, de positie binnen de bestandsstroom door het aantal bytes lezen en bewaakt annuleringsaanvragen.

ReadAsync(Memory<Byte>, CancellationToken)

Asynchroon leest een reeks bytes uit de huidige bestandsstroom en schrijft deze naar een geheugenregio, verplaatst de positie in de bestandsstroom door het aantal bytes lezen en bewaakt annuleringsaanvragen.

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)

Parameters

buffer
Memory<Byte>

De buffer om de gegevens naar te schrijven.

cancellationToken
CancellationToken

Het token dat moet worden gecontroleerd op annuleringsaanvragen. De standaardwaarde is None.

Retouren

Een taak die de asynchrone leesbewerking vertegenwoordigt en het totale aantal bytes in de buffer verpakt. De resultaatwaarde kan kleiner zijn dan het aantal aangevraagde bytes als het aantal beschikbare bytes kleiner is dan het aangevraagde getal, of het kan 0 (nul) zijn als het einde van de stream is bereikt.

Uitzonderingen

Het annuleringstoken is geannuleerd. Deze uitzondering wordt opgeslagen in de geretourneerde taak.

Voorbeelden

In het volgende voorbeeld ziet u hoe u asynchroon uit een bestand kunt lezen.

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

Opmerkingen

Met de ReadAsync methode kunt u resource-intensieve bestandsbewerkingen uitvoeren zonder de hoofdthread te blokkeren. Deze prestatieoverweging is met name belangrijk in een Windows 8.x Store-app of -desktop-app, waarbij een tijdrovende streambewerking de UI-thread kan blokkeren en uw app kan weergeven alsof deze niet werkt. De asynchrone methoden worden gebruikt in combinatie met de trefwoorden async en await in Visual Basic en C#.

Gebruik de CanRead eigenschap om te bepalen of het huidige exemplaar leesopties ondersteunt.

Als de bewerking wordt geannuleerd voordat deze is voltooid, bevat de geretourneerde taak de TaskStatus.Canceled waarde voor de Status eigenschap. Als de ingang naar het bestand wordt verwijderd, bevat de geretourneerde taak de ObjectDisposedException uitzondering in de Task.Exception eigenschap.

Van toepassing op

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

Asynchroon leest een reeks bytes uit de huidige bestandsstroom en schrijft deze naar een bytematrix die begint bij een opgegeven offset, de positie binnen de bestandsstroom door het aantal bytes lezen en bewaakt annuleringsaanvragen.

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>
abstract member ReadAsync : byte[] * int * int * System.Threading.CancellationToken -> System.Threading.Tasks.Task<int>
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)

Parameters

buffer
Byte[]

De buffer om de gegevens naar te schrijven.

offset
Int32

De byte-offset buffer waarin gegevens uit de stream moeten worden geschreven.

count
Int32

Het maximum aantal bytes dat moet worden gelezen.

cancellationToken
CancellationToken

Het token dat moet worden gecontroleerd op annuleringsaanvragen.

Retouren

Een taak die de asynchrone leesbewerking vertegenwoordigt en het totale aantal bytes in de buffer verpakt. De resultaatwaarde kan kleiner zijn dan het aantal aangevraagde bytes als het aantal beschikbare bytes kleiner is dan het aangevraagde getal, of het kan 0 (nul) zijn als het einde van de stream is bereikt.

Kenmerken

Uitzonderingen

buffer is null.

offset of count is negatief.

De som van offset en count is groter dan de bufferlengte.

De stream biedt geen ondersteuning voor lezen.

De stroom is verwijderd.

De stream wordt momenteel gebruikt door een eerdere leesbewerking.

Het annuleringstoken is geannuleerd. Deze uitzondering wordt opgeslagen in de geretourneerde taak.

Voorbeelden

In het volgende voorbeeld ziet u hoe u asynchroon uit een bestand kunt lezen.

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

Opmerkingen

Met de ReadAsync methode kunt u resource-intensieve bestandsbewerkingen uitvoeren zonder de hoofdthread te blokkeren. Deze prestatieoverweging is met name belangrijk in een Windows 8.x Store-app of -desktop-app, waarbij een tijdrovende streambewerking de UI-thread kan blokkeren en uw app kan weergeven alsof deze niet werkt. De asynchrone methoden worden gebruikt in combinatie met de trefwoorden async en await in Visual Basic en C#.

Gebruik de CanRead eigenschap om te bepalen of het huidige exemplaar leesopties ondersteunt.

Als de bewerking wordt geannuleerd voordat deze is voltooid, bevat de geretourneerde taak de TaskStatus.Canceled waarde voor de Task.Status eigenschap. Als de ingang naar het bestand wordt verwijderd, bevat de geretourneerde taak de ObjectDisposedException uitzondering in de Task.Exception eigenschap.

Deze methode slaat op in de taak die alle uitzonderingen voor niet-gebruik retourneert die de synchrone tegenhanger van de methode kan genereren. Als er een uitzondering wordt opgeslagen in de geretourneerde taak, wordt deze uitzondering gegenereerd wanneer de taak wordt gewacht. Gebruiksonderzondering, zoals ArgumentException, worden nog steeds synchroon gegenereerd. Zie de uitzonderingen die zijn gegenereerd door Read(Byte[], Int32, Int32)de opgeslagen uitzonderingen voor de opgeslagen uitzonderingen.

Zie ook

Van toepassing op