StreamReader.ReadAsync Methode

Definitie

Overloads

Name Description
ReadAsync(Memory<Char>, CancellationToken)

De tekens uit de huidige stroom worden asynchroon gelezen in een geheugenblok.

ReadAsync(Char[], Int32, Int32)

Leest een opgegeven maximum aantal tekens uit de huidige stroom asynchroon en schrijft de gegevens naar een buffer, beginnend bij de opgegeven index.

ReadAsync(Memory<Char>, CancellationToken)

De tekens uit de huidige stroom worden asynchroon gelezen in een geheugenblok.

public override System.Threading.Tasks.ValueTask<int> ReadAsync(Memory<char> buffer, System.Threading.CancellationToken cancellationToken = default);
override this.ReadAsync : Memory<char> * System.Threading.CancellationToken -> System.Threading.Tasks.ValueTask<int>
Public Overrides Function ReadAsync (buffer As Memory(Of Char), Optional cancellationToken As CancellationToken = Nothing) As ValueTask(Of Integer)

Parameters

buffer
Memory<Char>

Wanneer deze methode wordt geretourneerd, bevat het opgegeven geheugenblok tekens vervangen door de tekens die uit de huidige bron worden gelezen.

cancellationToken
CancellationToken

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

Retouren

Een waardetaak die de asynchrone leesbewerking vertegenwoordigt. De waarde van de typeparameter van de waardetaak bevat het aantal tekens dat is gelezen of 0 als aan het einde van de stroom geen gegevens zijn gelezen. Het getal is kleiner dan of gelijk aan de buffer lengte, afhankelijk van of de gegevens beschikbaar zijn in de stream.

Uitzonderingen

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

Van toepassing op

ReadAsync(Char[], Int32, Int32)

Leest een opgegeven maximum aantal tekens uit de huidige stroom asynchroon en schrijft de gegevens naar een buffer, beginnend bij de opgegeven index.

public:
 override System::Threading::Tasks::Task<int> ^ ReadAsync(cli::array <char> ^ buffer, int index, int count);
public override System.Threading.Tasks.Task<int> ReadAsync(char[] buffer, int index, int count);
[System.Runtime.InteropServices.ComVisible(false)]
public override System.Threading.Tasks.Task<int> ReadAsync(char[] buffer, int index, int count);
override this.ReadAsync : char[] * int * int -> System.Threading.Tasks.Task<int>
[<System.Runtime.InteropServices.ComVisible(false)>]
override this.ReadAsync : char[] * int * int -> System.Threading.Tasks.Task<int>
Public Overrides Function ReadAsync (buffer As Char(), index As Integer, count As Integer) As Task(Of Integer)

Parameters

buffer
Char[]

Wanneer deze methode wordt geretourneerd, bevat de opgegeven tekenmatrix met de waarden tussen index en (index + count - 1) vervangen door de tekens die uit de huidige bron worden gelezen.

index
Int32

De positie buffer waarin moet worden geschreven.

count
Int32

Het maximum aantal tekens dat moet worden gelezen. Als het einde van de stroom wordt bereikt voordat het opgegeven aantal tekens in de buffer wordt geschreven, retourneert de huidige methode.

Retouren

Een taak die de asynchrone leesbewerking vertegenwoordigt. De waarde van de TResult parameter bevat het totale aantal tekens dat in de buffer wordt gelezen. De resultaatwaarde kan kleiner zijn dan het aantal tekens dat is aangevraagd als het aantal tekens dat momenteel beschikbaar is 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.

index of count is negatief.

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

De stroom is verwijderd.

De lezer wordt momenteel gebruikt door een eerdere leesbewerking.

Voorbeelden

In het volgende voorbeeld ziet u hoe u alle tekens in een bestand kunt lezen met behulp van de ReadAsync(Char[], Int32, Int32) methode. Er wordt gecontroleerd of elk teken een letter, cijfer of witruimte is voordat u het teken toevoegt aan een exemplaar van de StringBuilder klasse.

using System;
using System.Windows;
using System.IO;
using System.Text;

namespace WpfApplication
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private async void Button_Click_1(object sender, RoutedEventArgs e)
        {
            string filename = @"C:\Example\existingfile.txt";
            char[] result;
            StringBuilder builder = new StringBuilder();

            using (StreamReader reader = File.OpenText(filename))
            {
                result = new char[reader.BaseStream.Length];
                await reader.ReadAsync(result, 0, (int)reader.BaseStream.Length);
            }

            foreach (char c in result)
            {
                if (char.IsLetterOrDigit(c) || char.IsWhiteSpace(c))
                {
                    builder.Append(c);
                }
            }
            FileOutput.Text = builder.ToString();
        }
    }
}
Imports System.Text
Imports System.IO

Class MainWindow

    Private Async Sub Button_Click_1(sender As Object, e As RoutedEventArgs)
        Dim filename As String = "C:\Example\existingfile.txt"
        Dim result() As Char
        Dim builder As StringBuilder = New StringBuilder()

        Using reader As StreamReader = File.OpenText(filename)
            ReDim result(reader.BaseStream.Length)
            Await reader.ReadAsync(result, 0, reader.BaseStream.Length)
        End Using

        For Each c As Char In result
            If (Char.IsLetterOrDigit(c) Or Char.IsWhiteSpace(c)) Then
                builder.Append(c)
            End If
            Next
        FileOutput.Text = builder.ToString()
    End Sub
End Class

Opmerkingen

De taak wordt voltooid nadat het aantal tekens dat door de count parameter is opgegeven, is gelezen of het einde van de stream is bereikt.

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(Char[], Int32, Int32)de opgeslagen uitzonderingen voor de opgeslagen uitzonderingen.

Van toepassing op