StreamReader.ReadAsync 方法

定义

重载

ReadAsync(Memory<Char>, CancellationToken)

将当前流中的字符异步读入内存块。

ReadAsync(Char[], Int32, Int32)

从当前流中异步读取指定的最大字符,并且从指定的索引位置开始将该数据写入缓冲区。

ReadAsync(Memory<Char>, CancellationToken)

将当前流中的字符异步读入内存块。

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)

参数

buffer
Memory<Char>

此方法返回时,包含指定的字符内存块,这些字符由从当前源中读取的字符替换。

cancellationToken
CancellationToken

要监视取消请求的标记。 默认值是 None

返回

ValueTask<Int32>

表示异步读取操作的值任务。 值任务的类型参数的值包含已读取的字符数,或者如果已到达流结尾并且未读取任何数据,则为 0。 该数小于或等于 buffer 长度,具体取决于流中是否有可用的数据。

适用于

ReadAsync(Char[], Int32, Int32)

从当前流中异步读取指定的最大字符,并且从指定的索引位置开始将该数据写入缓冲区。

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)

参数

buffer
Char[]

当此方法返回时,包含指定的字符数组,此数组中 index 和 (index + count - 1) 之间的值被从当前源中读取的字符所替换。

index
Int32

buffer 中开始写入的位置。

count
Int32

最多读取的字符数。 如果在将指定的字符数写入缓冲区之前已到达流结尾,则将返回当前方法。

返回

Task<Int32>

表示异步读取操作的任务。 TResult 参数的值包含读入缓冲区的总字符数。 如果当前可用字符数少于所请求的字符数,则该结果值可小于所请求的字符数;如果已到达流结尾时,则为 0(零)。

属性

例外

buffernull

indexcount 为负数。

indexcount 的总和大于缓冲区长度。

已释放流。

以前的读取操作当前正在使用读取器。

示例

以下示例演示如何使用 ReadAsync(Char[], Int32, Int32) 方法读取文件中的所有字符。 在将字符添加到 类的 StringBuilder 实例之前,它会检查每个字符是字母、数字还是空格。

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

注解

读取参数指定的 count 字符数或到达流的末尾后,任务完成。

适用于