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)异常。