StreamReader.ReadAsync 方法   
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
重载
| ReadAsync(Memory<Char>, CancellationToken) | 将当前流中的字符异步读入内存块。 | 
| ReadAsync(Char[], Int32, Int32) | 从当前流中异步读取指定的最大字符,并且从指定的索引位置开始将该数据写入缓冲区。 | 
ReadAsync(Memory<Char>, CancellationToken)
- Source:
- StreamReader.cs
- Source:
- StreamReader.cs
- Source:
- StreamReader.cs
将当前流中的字符异步读入内存块。
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)参数
- cancellationToken
- CancellationToken
要监视取消请求的标记。 默认值为 None。
返回
表示异步读取操作的值任务。 值任务的类型参数的值包含已读取的字符数,或者如果已到达流结尾并且未读取任何数据,则为 0。 该数小于或等于 buffer 长度,具体取决于流中是否有可用的数据。
例外
取消令牌已取消。 此异常存储在返回的任务中。
适用于
ReadAsync(Char[], Int32, Int32)
- Source:
- StreamReader.cs
- Source:
- StreamReader.cs
- Source:
- StreamReader.cs
从当前流中异步读取指定的最大字符,并且从指定的索引位置开始将该数据写入缓冲区。
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
最多读取的字符数。 如果在将指定的字符数写入缓冲区之前已到达流结尾,则将返回当前方法。
返回
表示异步读取操作的任务。 
              TResult 参数的值包含读入缓冲区的总字符数。 如果当前可用字符数少于所请求的字符数,则该结果值可小于所请求的字符数;如果已到达流结尾时,则为 0(零)。
- 属性
例外
              buffer 为 null。
              index 或 count 为负数。
              index 和 count 的总和大于缓冲区长度。
已释放流。
以前的读取操作当前正在使用读取器。
示例
以下示例演示如何使用 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 字符数或到达流的末尾后,任务完成。
此方法将存储在任务中,它返回该方法的同步对应项可能引发的所有非使用异常。 如果异常存储在返回的任务中,则在等待任务时将引发该异常。 使用异常(如 ArgumentException)仍会同步引发。 有关存储的异常,请参阅 引发的 Read(Char[], Int32, Int32)异常。