Поделиться через


FileStream.WriteAsync Метод

Определение

Перегрузки

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

Асинхронно записывает последовательность байтов в текущий поток, перемещает текущую позицию внутри потока на число записанных байтов и отслеживает запросы отмены.

WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Асинхронно записывает последовательность байтов из области памяти в текущий файловый поток, перемещает текущую позицию внутри файлового потока на число записанных байтов и отслеживает запросы отмены.

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

Исходный код:
FileStream.cs
Исходный код:
FileStream.cs
Исходный код:
FileStream.cs

Асинхронно записывает последовательность байтов в текущий поток, перемещает текущую позицию внутри потока на число записанных байтов и отслеживает запросы отмены.

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

Параметры

buffer
Byte[]

Буфер, из которого записываются данные.

offset
Int32

Смещение байтов (начиная с нуля) в buffer, с которого начинается копирование байтов в поток.

count
Int32

Максимальное число байтов для записи.

cancellationToken
CancellationToken

Токен для отслеживания запросов отмены.

Возвращаемое значение

Задача, представляющая асинхронную операцию записи.

Атрибуты

Исключения

buffer имеет значение null.

offset или count является отрицательным значением.

Сумма offset и count больше, чем длина буфера.

Поток не поддерживает запись.

Поток был удален.

Поток в настоящее время используется предыдущей операцией записи.

Маркер отмены был отменен. Это исключение сохраняется в возвращаемой задаче.

Примеры

В следующем примере показано, как выполнить асинхронную запись в файл.

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)
        {
            UnicodeEncoding uniencoding = new UnicodeEncoding();
            string filename = @"c:\Users\exampleuser\Documents\userinputlog.txt";

            byte[] result = uniencoding.GetBytes(UserInput.Text);

            using (FileStream SourceStream = File.Open(filename, FileMode.OpenOrCreate))
            {
                SourceStream.Seek(0, SeekOrigin.End);
                await SourceStream.WriteAsync(result, 0, result.Length);
            }
        }
    }
}
Imports System.IO
Imports System.Text

Class MainWindow
    Private Async Sub Button_Click(sender As Object, e As RoutedEventArgs)
        Dim uniencoding As UnicodeEncoding = New UnicodeEncoding()
        Dim filename As String = "c:\Users\exampleuser\Documents\userinputlog.txt"

        Dim result As Byte() = uniencoding.GetBytes(UserInput.Text)

        Using SourceStream As FileStream = File.Open(filename, FileMode.OpenOrCreate)
            SourceStream.Seek(0, SeekOrigin.End)
            Await SourceStream.WriteAsync(result, 0, result.Length)
        End Using
    End Sub
End Class

Комментарии

Метод WriteAsync позволяет выполнять ресурсоемкие операции с файлами, не блокируя поток main. Это особенно важно в приложениях, где ресурсоемкая потоковая операция может заблокировать поток пользовательского интерфейса и сделать приложение таким, как если бы оно не работало.

Используйте свойство , CanWrite чтобы определить, поддерживает ли текущий экземпляр запись.

Если операция отменена до ее завершения, возвращаемая задача содержит Canceled значение Status свойства . Если дескриптор файла удален, возвращаемая задача содержит ObjectDisposedException исключение в свойстве Exception .

Этот метод сохраняет в задаче все исключения, не относящиеся к использованию, которые может создавать синхронный аналог метода. Если исключение сохраняется в возвращаемой задаче, это исключение будет создано при ожидании задачи. Исключения использования, такие как ArgumentException, по-прежнему создаются синхронно. Хранимые исключения см. в разделе исключения, создаваемые Write(Byte[], Int32, Int32).

См. также раздел

Применяется к

WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Исходный код:
FileStream.cs
Исходный код:
FileStream.cs
Исходный код:
FileStream.cs

Асинхронно записывает последовательность байтов из области памяти в текущий файловый поток, перемещает текущую позицию внутри файлового потока на число записанных байтов и отслеживает запросы отмены.

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

Параметры

buffer
ReadOnlyMemory<Byte>

Область памяти, из которой будут записываться данные.

cancellationToken
CancellationToken

Токен для отслеживания запросов отмены. Значение по умолчанию — None.

Возвращаемое значение

Задача, представляющая асинхронную операцию записи.

Исключения

Маркер отмены был отменен. Это исключение сохраняется в возвращаемой задаче.

Комментарии

Метод WriteAsync позволяет выполнять ресурсоемкие операции ввода-вывода, не блокируя поток main. Это особенно важно в приложениях, где ресурсоемкая потоковая операция может заблокировать поток пользовательского интерфейса и сделать приложение таким, как если бы оно не работало.

Используйте свойство , CanWrite чтобы определить, поддерживает ли текущий экземпляр запись.

Если операция отменена до ее завершения, возвращаемая задача содержит TaskStatus.Canceled значение Task.Status свойства .

Применяется к