Udostępnij za pośrednictwem


StreamReader.ReadAsync Metoda

Definicja

Przeciążenia

ReadAsync(Memory<Char>, CancellationToken)

Asynchronicznie odczytuje znaki z bieżącego strumienia do bloku pamięci.

ReadAsync(Char[], Int32, Int32)

Odczytuje określoną maksymalną liczbę znaków z bieżącego strumienia asynchronicznie i zapisuje dane w buforze, począwszy od określonego indeksu.

ReadAsync(Memory<Char>, CancellationToken)

Źródło:
StreamReader.cs
Źródło:
StreamReader.cs
Źródło:
StreamReader.cs

Asynchronicznie odczytuje znaki z bieżącego strumienia do bloku pamięci.

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>

Gdy ta metoda zwraca, zawiera określony blok pamięci znaków zastąpiony przez znaki odczytywane z bieżącego źródła.

cancellationToken
CancellationToken

Token do monitorowania żądań anulowania. Wartość domyślna to None.

Zwraca

Zadanie wartości reprezentujące operację odczytu asynchronicznego. Wartość parametru typu zadania wartości zawiera liczbę znaków odczytanych lub 0, jeśli na końcu strumienia nie odczytano żadnych danych. Liczba będzie mniejsza lub równa buffer długości, w zależności od tego, czy dane są dostępne w strumieniu.

Wyjątki

Token anulowania został anulowany. Ten wyjątek jest przechowywany w zwróconym zadaniu.

Dotyczy

ReadAsync(Char[], Int32, Int32)

Źródło:
StreamReader.cs
Źródło:
StreamReader.cs
Źródło:
StreamReader.cs

Odczytuje określoną maksymalną liczbę znaków z bieżącego strumienia asynchronicznie i zapisuje dane w buforze, począwszy od określonego indeksu.

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[]

Gdy ta metoda zwraca, zawiera określoną tablicę znaków z wartościami między index i (index + count - 1) zastąpionymi znakami odczytywanymi z bieżącego źródła.

index
Int32

Pozycja, w buffer której rozpocząć pisanie.

count
Int32

Maksymalna liczba znaków do odczytania. Jeśli koniec strumienia zostanie osiągnięty przed zapisaną określoną liczbą znaków w buforze, zwraca bieżąca metoda.

Zwraca

Zadanie reprezentujące operację odczytu asynchronicznego. Wartość parametru TResult zawiera całkowitą liczbę znaków odczytanych do buforu. Wartość wyniku może być mniejsza niż liczba znaków żądanych, jeśli liczba dostępnych znaków jest obecnie mniejsza niż żądana liczba lub może być równa 0 (zero), jeśli koniec strumienia został osiągnięty.

Atrybuty

Wyjątki

buffer to null.

index lub count jest ujemny.

Suma index wartości i count jest większa niż długość buforu.

Strumień został usunięty.

Czytelnik jest obecnie używany przez poprzednią operację odczytu.

Przykłady

W poniższym przykładzie pokazano, jak odczytać wszystkie znaki w pliku przy użyciu ReadAsync(Char[], Int32, Int32) metody . Sprawdza, czy każdy znak jest literą, cyfrą lub białym znakiem przed dodaniem znaku do wystąpienia StringBuilder klasy.

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

Uwagi

Zadanie zostanie zakończone po odczytaniu count liczby znaków określonych przez parametr lub osiągnięciu końca strumienia.

Ta metoda przechowuje w zadaniu wszystkie wyjątki inne niż użycie, które mogą zgłaszać synchroniczna odpowiednik metody. Jeśli wyjątek jest przechowywany w zwróconym zadaniu, ten wyjątek zostanie zgłoszony po oczekiwaniu na zadanie. Wyjątki użycia, takie jak ArgumentException, są nadal zgłaszane synchronicznie. Aby uzyskać informacje o przechowywanych wyjątkach, zobacz wyjątki zgłaszane przez Read(Char[], Int32, Int32)usługę .

Dotyczy