Stream.ReadAsync 方法

定義

以非同步的方式從目前的資料流讀取位元組序列,並依讀取的位元組數將資料流中的位置往前移。

多載

ReadAsync(Memory<Byte>, CancellationToken)

以非同步的方式從目前資料流讀取一連串的位元組、依所讀取的位元組數目進階資料流中的位置,以及監視取消要求。

ReadAsync(Byte[], Int32, Int32)

以非同步的方式從目前的資料流讀取位元組序列,並依讀取的位元組數將資料流中的位置往前移。

ReadAsync(Byte[], Int32, Int32, CancellationToken)

以非同步的方式從目前資料流讀取一連串的位元組、依所讀取的位元組數目進階資料流中的位置,以及監視取消要求。

ReadAsync(Memory<Byte>, CancellationToken)

以非同步的方式從目前資料流讀取一連串的位元組、依所讀取的位元組數目進階資料流中的位置,以及監視取消要求。

public virtual System.Threading.Tasks.ValueTask<int> ReadAsync (Memory<byte> buffer, System.Threading.CancellationToken cancellationToken = default);
abstract member ReadAsync : Memory<byte> * System.Threading.CancellationToken -> System.Threading.Tasks.ValueTask<int>
override this.ReadAsync : Memory<byte> * System.Threading.CancellationToken -> System.Threading.Tasks.ValueTask<int>
Public Overridable Function ReadAsync (buffer As Memory(Of Byte), Optional cancellationToken As CancellationToken = Nothing) As ValueTask(Of Integer)

參數

buffer
Memory<Byte>

要寫入資料的記憶體區域。

cancellationToken
CancellationToken

用來監視是否有取消要求的語彙基元。 預設值是 None

傳回

ValueTask<Int32>

表示非同步讀取作業的工作。 其 Result 屬性值包含讀入緩衝區的位元組總數。 如果目前無法取得足夠的位元組,則結果值可能小於緩衝區所配置的位元組數,如果已經到達資料流末端,則為 0 (零)。

備註

ReadAsync方法可讓您在不封鎖主執行緒的情況下,執行需要大量資源的 i/o 作業。 這項效能考慮在 Windows 8. x 存放區應用程式或傳統型應用程式中特別重要,因為這種情況下,耗時的串流作業可以封鎖 UI 執行緒,並讓您的應用程式看起來好像無法正常運作。 非同步方法會搭配 async await Visual Basic 和 c # 中的和關鍵字一起使用。

CanRead 可以使用屬性來判斷目前的實例是否支援讀取。

如果作業在完成之前取消,則傳回的工作會包含 TaskStatus.Canceled 屬性的值 Status

如需範例,請參閱多載 ReadAsync(Byte[], Int32, Int32)

適用於

ReadAsync(Byte[], Int32, Int32)

以非同步的方式從目前的資料流讀取位元組序列,並依讀取的位元組數將資料流中的位置往前移。

public:
 System::Threading::Tasks::Task<int> ^ ReadAsync(cli::array <System::Byte> ^ buffer, int offset, int count);
public System.Threading.Tasks.Task<int> ReadAsync (byte[] buffer, int offset, int count);
[System.Runtime.InteropServices.ComVisible(false)]
public System.Threading.Tasks.Task<int> ReadAsync (byte[] buffer, int offset, int count);
member this.ReadAsync : byte[] * int * int -> System.Threading.Tasks.Task<int>
[<System.Runtime.InteropServices.ComVisible(false)>]
member this.ReadAsync : byte[] * int * int -> System.Threading.Tasks.Task<int>
Public Function ReadAsync (buffer As Byte(), offset As Integer, count As Integer) As Task(Of Integer)

參數

buffer
Byte[]

寫入資料的緩衝區。

offset
Int32

開始於此處自資料流寫入資料的 buffer 中的位元組位移。

count
Int32

要讀取的最大位元組數。

傳回

Task<Int32>

表示非同步讀取作業的工作。 TResult 參數的值會包含讀取至緩衝區的位元組總數。 如果目前可供使用的位元組數目少於所要求的數目,結果值可能會小於所要求的位元組數目,或者如果已經到達資料流末端,則可能為 0 (零)。

屬性

例外狀況

buffernull

offsetcount 為負。

offsetcount 的總和大於緩衝區長度。

資料流不支援讀取。

資料流已經處置。

之前的讀取作業目前正在使用資料流。

範例

下列範例示範如何以非同步方式從檔案讀取。 此範例會使用 FileStream 衍生自類別的類別 Stream

using System;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.IO;

namespace WpfApplication1
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private async void Button_Click(object sender, RoutedEventArgs e)
        {
            string filename = @"c:\Temp\userinputlog.txt";
            byte[] result;

            using (FileStream SourceStream = File.Open(filename, FileMode.Open))
            {
                result = new byte[SourceStream.Length];
                await SourceStream.ReadAsync(result, 0, (int)SourceStream.Length);
            }

            UserInput.Text = System.Text.Encoding.ASCII.GetString(result);
        }
    }
}
Imports System.IO
Imports System.Text

Class MainWindow
    Private Async Sub Button_Click(sender As Object, e As RoutedEventArgs)
        Dim filename As String = "c:\Temp\userinputlog.txt"

        Dim result As Byte()

        Using SourceStream As FileStream = File.Open(filename, FileMode.Open)
            result = New Byte(SourceStream.Length - 1) {}
            Await SourceStream.ReadAsync(result, 0, CType(SourceStream.Length, Integer))
        End Using

        UserInput.Text = System.Text.Encoding.ASCII.GetString(result)
    End Sub
End Class

備註

ReadAsync方法可讓您在不封鎖主執行緒的情況下,執行需要大量資源的 i/o 作業。 這項效能考慮在 Windows 8. x 存放區應用程式或傳統型應用程式中特別重要,因為這種情況下,耗時的串流作業可以封鎖 UI 執行緒,並讓您的應用程式看起來好像無法正常運作。 非同步方法會搭配 async await Visual Basic 和 c # 中的和關鍵字一起使用。

CanRead 可以使用屬性來判斷目前的實例是否支援讀取。

適用於

ReadAsync(Byte[], Int32, Int32, CancellationToken)

以非同步的方式從目前資料流讀取一連串的位元組、依所讀取的位元組數目進階資料流中的位置,以及監視取消要求。

public:
 virtual System::Threading::Tasks::Task<int> ^ ReadAsync(cli::array <System::Byte> ^ buffer, int offset, int count, System::Threading::CancellationToken cancellationToken);
public virtual System.Threading.Tasks.Task<int> ReadAsync (byte[] buffer, int offset, int count, System.Threading.CancellationToken cancellationToken);
[System.Runtime.InteropServices.ComVisible(false)]
public virtual System.Threading.Tasks.Task<int> ReadAsync (byte[] buffer, int offset, int count, System.Threading.CancellationToken cancellationToken);
abstract member ReadAsync : byte[] * int * int * System.Threading.CancellationToken -> System.Threading.Tasks.Task<int>
override this.ReadAsync : byte[] * int * int * System.Threading.CancellationToken -> System.Threading.Tasks.Task<int>
[<System.Runtime.InteropServices.ComVisible(false)>]
abstract member ReadAsync : byte[] * int * int * System.Threading.CancellationToken -> System.Threading.Tasks.Task<int>
override this.ReadAsync : byte[] * int * int * System.Threading.CancellationToken -> System.Threading.Tasks.Task<int>
Public Overridable Function ReadAsync (buffer As Byte(), offset As Integer, count As Integer, cancellationToken As CancellationToken) As Task(Of Integer)

參數

buffer
Byte[]

寫入資料的緩衝區。

offset
Int32

開始於此處自資料流寫入資料的 buffer 中的位元組位移。

count
Int32

要讀取的最大位元組數。

cancellationToken
CancellationToken

用來監視是否有取消要求的語彙基元。 預設值是 None

傳回

Task<Int32>

表示非同步讀取作業的工作。 TResult 參數的值會包含讀取至緩衝區的位元組總數。 如果目前可供使用的位元組數目少於所要求的數目,結果值可能會小於所要求的位元組數目,或者如果已經到達資料流末端,則可能為 0 (零)。

屬性

例外狀況

buffernull

offsetcount 為負。

offsetcount 的總和大於緩衝區長度。

資料流不支援讀取。

資料流已經處置。

之前的讀取作業目前正在使用資料流。

備註

ReadAsync方法可讓您在不封鎖主執行緒的情況下,執行需要大量資源的 i/o 作業。 這項效能考慮在 Windows 8. x 存放區應用程式或傳統型應用程式中特別重要,因為這種情況下,耗時的串流作業可以封鎖 UI 執行緒,並讓您的應用程式看起來好像無法正常運作。 非同步方法會搭配 async await Visual Basic 和 c # 中的和關鍵字一起使用。

CanRead 可以使用屬性來判斷目前的實例是否支援讀取。

如果作業在完成之前取消,則傳回的工作會包含 Canceled 屬性的值 Status

如需範例,請參閱多載 ReadAsync(Byte[], Int32, Int32)

另請參閱

適用於