Sdílet prostřednictvím


StreamReader.ReadAsync Metoda

Definice

Přetížení

ReadAsync(Memory<Char>, CancellationToken)

Asynchronně přečte znaky z aktuálního datového proudu do bloku paměti.

ReadAsync(Char[], Int32, Int32)

Přečte asynchronně zadaný maximální počet znaků z aktuálního datového proudu a zapíše data do vyrovnávací paměti počínaje zadaným indexem.

ReadAsync(Memory<Char>, CancellationToken)

Zdroj:
StreamReader.cs
Zdroj:
StreamReader.cs
Zdroj:
StreamReader.cs

Asynchronně přečte znaky z aktuálního datového proudu do bloku paměti.

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)

Parametry

buffer
Memory<Char>

Když tato metoda vrátí, obsahuje zadaný paměť blok znaků nahrazen znaky přečtené z aktuálního zdroje.

cancellationToken
CancellationToken

Token, který se má monitorovat pro žádosti o zrušení. Výchozí hodnota je None.

Návraty

Úloha s hodnotou, která představuje asynchronní operaci čtení. Hodnota parametru typu úkolu hodnoty obsahuje počet znaků, které byly přečtené, nebo 0, pokud na konci datového proudu a nebyla načtena žádná data. Číslo bude menší nebo rovno buffer délce v závislosti na tom, jestli jsou data dostupná v rámci datového proudu.

Výjimky

Token zrušení byl zrušen. Tato výjimka se uloží do vrácené úlohy.

Platí pro

ReadAsync(Char[], Int32, Int32)

Zdroj:
StreamReader.cs
Zdroj:
StreamReader.cs
Zdroj:
StreamReader.cs

Přečte asynchronně zadaný maximální počet znaků z aktuálního datového proudu a zapíše data do vyrovnávací paměti počínaje zadaným indexem.

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)

Parametry

buffer
Char[]

Když tato metoda vrátí hodnotu , obsahuje zadané pole znaků s hodnotami mezi index a (index + count - 1) nahrazenými znaky načtenými z aktuálního zdroje.

index
Int32

Pozice, ve buffer které se má začít psát.

count
Int32

Maximální počet znaků, které se mají přečíst. Pokud je dosaženo konce datového proudu před zadaný počet znaků je zapsán do vyrovnávací paměti, aktuální metoda vrátí.

Návraty

Úloha, která představuje asynchronní operaci čtení. Hodnota parametru TResult obsahuje celkový počet znaků načtených do vyrovnávací paměti. Výsledná hodnota může být menší než požadovaný počet znaků, pokud je počet aktuálně dostupných znaků menší než požadované číslo, nebo může být 0 (nula), pokud bylo dosaženo konce datového proudu.

Atributy

Výjimky

buffer je null.

index nebo count je negativní.

Součet index hodnot a count je větší než délka vyrovnávací paměti.

Datový proud byl odstraněn.

Čtečka je aktuálně používána předchozí operací čtení.

Příklady

Následující příklad ukazuje, jak číst všechny znaky v souboru pomocí ReadAsync(Char[], Int32, Int32) metody . Před přidáním znaku do instance třídy zkontroluje, zda je každý znak písmenem, číslicí nebo prázdnými StringBuilder znaky.

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

Poznámky

Úkol se dokončí buď po přečtení počtu znaků zadaných parametrem count , nebo po dosažení konce datového proudu.

Tato metoda ukládá do úlohy, která vrací všechny výjimky nepouužování, které může vyvolat synchronní protějšek metody. Pokud je do vrácené úlohy uložena výjimka, bude tato výjimka vyvolána, když je úloha očekávána. Výjimky použití, jako ArgumentExceptionje , se stále vyvolává synchronně. Informace o uložených výjimkách najdete v tématu Výjimky vyvolané nástrojem Read(Char[], Int32, Int32).

Platí pro