FileStream.ReadAsync Metod

Definition

Överlagringar

Name Description
ReadAsync(Memory<Byte>, CancellationToken)

Läser asynkront en sekvens med byte från den aktuella filströmmen och skriver dem till en minnesregion, avancerar positionen i filströmmen med antalet lästa byte och övervakar begäranden om annullering.

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

Läser asynkront en sekvens med byte från den aktuella filströmmen och skriver dem till en bytematris som börjar vid en angiven förskjutning, ökar positionen i filströmmen med antalet lästa byte och övervakar begäranden om annullering.

ReadAsync(Memory<Byte>, CancellationToken)

Läser asynkront en sekvens med byte från den aktuella filströmmen och skriver dem till en minnesregion, avancerar positionen i filströmmen med antalet lästa byte och övervakar begäranden om annullering.

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

Parametrar

buffer
Memory<Byte>

Bufferten som data ska skrivas till.

cancellationToken
CancellationToken

Token som ska övervakas för annulleringsbegäranden. Standardvärdet är None.

Returer

En uppgift som representerar den asynkrona läsåtgärden och omsluter det totala antalet byte som lästs in i bufferten. Resultatvärdet kan vara mindre än det antal byte som begärs om antalet tillgängliga byte för närvarande är mindre än det begärda talet, eller om det kan vara 0 (noll) om strömmens slut har nåtts.

Undantag

Annulleringstoken avbröts. Det här undantaget lagras i den returnerade aktiviteten.

Exempel

I följande exempel visas hur du läser från en fil asynkront.

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);
        }
    }
}
open System.Text
open System.IO

let read () =
    task {
        let filename = @"c:\Temp\userinputlog.txt"
        use sourceStream = File.Open(filename, FileMode.Open)
        let length = int sourceStream.Length    
        let result = Array.zeroCreate length 
        let! _ = sourceStream.ReadAsync(result, 0, length)
        return Encoding.ASCII.GetString result
    }

let main =
    task {
        let! text = read ()
        printfn $"{text}"
    }    
main.Wait()
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

Kommentarer

Med ReadAsync metoden kan du utföra resursintensiva filåtgärder utan att blockera huvudtråden. Den här prestandaöverväganden är särskilt viktig i en Windows 8.x Store-app eller skrivbordsapp där en tidskrävande strömåtgärd kan blockera användargränssnittstråden och få appen att se ut som om den inte fungerar. Asynkrona metoder används tillsammans med nyckelorden async och await i Visual Basic och C#.

Använd egenskapen CanRead för att avgöra om den aktuella instansen stöder läsning.

Om åtgärden avbryts innan den slutförs innehåller TaskStatus.Canceled den returnerade aktiviteten värdet för Status egenskapen. Om handtaget till filen tas bort innehåller ObjectDisposedException den returnerade uppgiften undantaget i Task.Exception egenskapen.

Gäller för

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

Läser asynkront en sekvens med byte från den aktuella filströmmen och skriver dem till en bytematris som börjar vid en angiven förskjutning, ökar positionen i filströmmen med antalet lästa byte och övervakar begäranden om annullering.

public:
 override System::Threading::Tasks::Task<int> ^ ReadAsync(cli::array <System::Byte> ^ buffer, int offset, int count, System::Threading::CancellationToken cancellationToken);
public override System.Threading.Tasks.Task<int> ReadAsync(byte[] buffer, int offset, int count, System.Threading.CancellationToken cancellationToken);
[System.Runtime.InteropServices.ComVisible(false)]
public override System.Threading.Tasks.Task<int> ReadAsync(byte[] buffer, int offset, int count, System.Threading.CancellationToken cancellationToken);
override this.ReadAsync : byte[] * int * int * System.Threading.CancellationToken -> System.Threading.Tasks.Task<int>
[<System.Runtime.InteropServices.ComVisible(false)>]
override this.ReadAsync : byte[] * int * int * System.Threading.CancellationToken -> System.Threading.Tasks.Task<int>
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 Overrides Function ReadAsync (buffer As Byte(), offset As Integer, count As Integer, cancellationToken As CancellationToken) As Task(Of Integer)

Parametrar

buffer
Byte[]

Bufferten som data ska skrivas till.

offset
Int32

Byteförskjutningen buffer där du börjar skriva data från dataströmmen.

count
Int32

Det maximala antalet byte som ska läsas.

cancellationToken
CancellationToken

Token som ska övervakas för annulleringsbegäranden.

Returer

En uppgift som representerar den asynkrona läsåtgärden och omsluter det totala antalet byte som lästs in i bufferten. Resultatvärdet kan vara mindre än det antal byte som begärs om antalet tillgängliga byte för närvarande är mindre än det begärda talet, eller om det kan vara 0 (noll) om strömmens slut har nåtts.

Attribut

Undantag

buffer är null.

offset eller count är negativ.

Summan av offset och count är större än buffertlängden.

Strömmen stöder inte läsning.

Strömmen har tagits bort.

Strömmen används för närvarande av en tidigare läsåtgärd.

Annulleringstoken avbröts. Det här undantaget lagras i den returnerade aktiviteten.

Exempel

I följande exempel visas hur du läser från en fil asynkront.

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);
        }
    }
}
open System.Text
open System.IO

let read () =
    task {
        let filename = @"c:\Temp\userinputlog.txt"
        use sourceStream = File.Open(filename, FileMode.Open)
        let length = int sourceStream.Length    
        let result = Array.zeroCreate length 
        let! _ = sourceStream.ReadAsync(result, 0, length)
        return Encoding.ASCII.GetString result
    }

let main =
    task {
        let! text = read ()
        printfn $"{text}"
    }    
main.Wait()
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

Kommentarer

Med ReadAsync metoden kan du utföra resursintensiva filåtgärder utan att blockera huvudtråden. Den här prestandaöverväganden är särskilt viktig i en Windows 8.x Store-app eller skrivbordsapp där en tidskrävande strömåtgärd kan blockera användargränssnittstråden och få appen att se ut som om den inte fungerar. Asynkrona metoder används tillsammans med nyckelorden async och await i Visual Basic och C#.

Använd egenskapen CanRead för att avgöra om den aktuella instansen stöder läsning.

Om åtgärden avbryts innan den slutförs innehåller TaskStatus.Canceled den returnerade aktiviteten värdet för Task.Status egenskapen. Om handtaget till filen tas bort innehåller ObjectDisposedException den returnerade uppgiften undantaget i Task.Exception egenskapen.

Den här metoden lagrar i aktiviteten som returnerar alla undantag som inte används som metodens synkrona motsvarighet kan utlösa. Om ett undantag lagras i den returnerade aktiviteten utlöses undantaget när aktiviteten väntar. Användningsfel, till exempel ArgumentException, genereras fortfarande synkront. De lagrade undantagen finns i undantagen som genereras av Read(Byte[], Int32, Int32).

Se även

Gäller för