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


Stream.CopyToAsync Метод

Определение

Асинхронно считывает байты из текущего потока и записывает их в другой поток. Обе позиции потоков расширены по количеству скопированных байтов.

Перегрузки

Имя Описание
CopyToAsync(Stream, Int32, CancellationToken)

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

CopyToAsync(Stream, CancellationToken)

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

CopyToAsync(Stream)

Асинхронно считывает байты из текущего потока и записывает их в другой поток. Обе позиции потоков расширены по количеству скопированных байтов.

CopyToAsync(Stream, Int32)

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

CopyToAsync(Stream, Int32, CancellationToken)

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

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

public:
 virtual System::Threading::Tasks::Task ^ CopyToAsync(System::IO::Stream ^ destination, int bufferSize, System::Threading::CancellationToken cancellationToken);
public virtual System.Threading.Tasks.Task CopyToAsync(System.IO.Stream destination, int bufferSize, System.Threading.CancellationToken cancellationToken);
[System.Runtime.InteropServices.ComVisible(false)]
public virtual System.Threading.Tasks.Task CopyToAsync(System.IO.Stream destination, int bufferSize, System.Threading.CancellationToken cancellationToken);
abstract member CopyToAsync : System.IO.Stream * int * System.Threading.CancellationToken -> System.Threading.Tasks.Task
override this.CopyToAsync : System.IO.Stream * int * System.Threading.CancellationToken -> System.Threading.Tasks.Task
[<System.Runtime.InteropServices.ComVisible(false)>]
abstract member CopyToAsync : System.IO.Stream * int * System.Threading.CancellationToken -> System.Threading.Tasks.Task
override this.CopyToAsync : System.IO.Stream * int * System.Threading.CancellationToken -> System.Threading.Tasks.Task
Public Overridable Function CopyToAsync (destination As Stream, bufferSize As Integer, cancellationToken As CancellationToken) As Task

Параметры

destination
Stream

Поток, в который будет скопировано содержимое текущего потока.

bufferSize
Int32

Размер буфера в байтах. Это значение должно быть больше нуля. Размер по умолчанию — 81920.

cancellationToken
CancellationToken

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

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

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

Атрибуты

Исключения

destination равно null.

bufferSize является отрицательным или нулевым.

Текущий поток или целевой поток удаляются.

Текущий поток не поддерживает чтение, а целевой поток не поддерживает запись.

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

Комментарии

Этот CopyToAsync метод позволяет выполнять операции ввода-вывода с большим объемом ресурсов, не блокируя основной поток. Это особенно важно в приложении для Магазина Windows 8.x или классическом приложении, где времязатратная операция потока может заблокировать поток пользовательского интерфейса и создать впечатление, что приложение не работает. Асинхронные методы используются в сочетании с asyncawait ключевыми словами в Visual Basic и C#.

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

Копирование начинается с текущей позиции в текущем потоке.

Пример копирования между двумя потоками см. в разделе перегрузки CopyToAsync(Stream) .

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

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

CopyToAsync(Stream, CancellationToken)

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

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

public:
 System::Threading::Tasks::Task ^ CopyToAsync(System::IO::Stream ^ destination, System::Threading::CancellationToken cancellationToken);
public System.Threading.Tasks.Task CopyToAsync(System.IO.Stream destination, System.Threading.CancellationToken cancellationToken);
member this.CopyToAsync : System.IO.Stream * System.Threading.CancellationToken -> System.Threading.Tasks.Task
Public Function CopyToAsync (destination As Stream, cancellationToken As CancellationToken) As Task

Параметры

destination
Stream

Поток, в который будет скопировано содержимое текущего потока.

cancellationToken
CancellationToken

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

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

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

Исключения

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

Комментарии

Этот CopyToAsync метод позволяет выполнять операции ввода-вывода с большим объемом ресурсов, не блокируя основной поток. Это особенно важно в приложении для Магазина Windows 8.x или классическом приложении, где времязатратная операция потока может заблокировать поток пользовательского интерфейса и создать впечатление, что приложение не работает. Асинхронные методы используются в сочетании с asyncawait ключевыми словами в Visual Basic и C#.

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

Копирование начинается с текущей позиции в текущем потоке.

Пример копирования между двумя потоками см. в разделе перегрузки CopyToAsync(Stream) .

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

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

CopyToAsync(Stream)

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

Асинхронно считывает байты из текущего потока и записывает их в другой поток. Обе позиции потоков расширены по количеству скопированных байтов.

public:
 System::Threading::Tasks::Task ^ CopyToAsync(System::IO::Stream ^ destination);
public System.Threading.Tasks.Task CopyToAsync(System.IO.Stream destination);
[System.Runtime.InteropServices.ComVisible(false)]
public System.Threading.Tasks.Task CopyToAsync(System.IO.Stream destination);
member this.CopyToAsync : System.IO.Stream -> System.Threading.Tasks.Task
[<System.Runtime.InteropServices.ComVisible(false)>]
member this.CopyToAsync : System.IO.Stream -> System.Threading.Tasks.Task
Public Function CopyToAsync (destination As Stream) As Task

Параметры

destination
Stream

Поток, в который будет скопировано содержимое текущего потока.

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

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

Атрибуты

Исключения

destination равно null.

Текущий поток или целевой поток удаляются.

Текущий поток не поддерживает чтение, а целевой поток не поддерживает запись.

Примеры

В следующем примере показано, как использовать два FileStream объекта для асинхронного копирования файлов из одного каталога в другой. Класс FileStream наследуется от класса Stream. Обратите внимание, что Click обработчик событий для Button элемента управления помечается async модификатором, так как вызывает асинхронный метод.

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

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

        private async void Button_Click(object sender, RoutedEventArgs e)
        {
            string StartDirectory = @"c:\Users\exampleuser\start";
            string EndDirectory = @"c:\Users\exampleuser\end";

            foreach (string filename in Directory.EnumerateFiles(StartDirectory))
            {
                using (FileStream SourceStream = File.Open(filename, FileMode.Open))
                {
                    using (FileStream DestinationStream = File.Create(EndDirectory + filename.Substring(filename.LastIndexOf('\\'))))
                    {
                        await SourceStream.CopyToAsync(DestinationStream);
                    }
                }
            }
        }
    }
}
Imports System.IO

Class MainWindow

    Private Async Sub Button_Click(sender As Object, e As RoutedEventArgs)
        Dim StartDirectory As String = "c:\Users\exampleuser\start"
        Dim EndDirectory As String = "c:\Users\exampleuser\end"

        For Each filename As String In Directory.EnumerateFiles(StartDirectory)
            Using SourceStream As FileStream = File.Open(filename, FileMode.Open)
                Using DestinationStream As FileStream = File.Create(EndDirectory + filename.Substring(filename.LastIndexOf("\"c)))
                    Await SourceStream.CopyToAsync(DestinationStream)
                End Using

            End Using
        Next
    End Sub

End Class

Комментарии

Этот CopyToAsync метод позволяет выполнять операции ввода-вывода с большим объемом ресурсов, не блокируя основной поток. Это особенно важно в приложении для Магазина Windows 8.x или классическом приложении, где времязатратная операция потока может заблокировать поток пользовательского интерфейса и создать впечатление, что приложение не работает. Асинхронные методы используются в сочетании с asyncawait ключевыми словами в Visual Basic и C#.

Копирование начинается с текущей позиции в текущем потоке.

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

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

CopyToAsync(Stream, Int32)

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

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

public:
 System::Threading::Tasks::Task ^ CopyToAsync(System::IO::Stream ^ destination, int bufferSize);
public System.Threading.Tasks.Task CopyToAsync(System.IO.Stream destination, int bufferSize);
[System.Runtime.InteropServices.ComVisible(false)]
public System.Threading.Tasks.Task CopyToAsync(System.IO.Stream destination, int bufferSize);
member this.CopyToAsync : System.IO.Stream * int -> System.Threading.Tasks.Task
[<System.Runtime.InteropServices.ComVisible(false)>]
member this.CopyToAsync : System.IO.Stream * int -> System.Threading.Tasks.Task
Public Function CopyToAsync (destination As Stream, bufferSize As Integer) As Task

Параметры

destination
Stream

Поток, в который будет скопировано содержимое текущего потока.

bufferSize
Int32

Размер буфера в байтах. Это значение должно быть больше нуля. Размер по умолчанию — 81920.

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

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

Атрибуты

Исключения

destination равно null.

bufferSize является отрицательным или нулевым.

Текущий поток или целевой поток удаляются.

Текущий поток не поддерживает чтение, а целевой поток не поддерживает запись.

Комментарии

Этот CopyToAsync метод позволяет выполнять операции ввода-вывода с большим объемом ресурсов, не блокируя основной поток. Это особенно важно в приложении для Магазина Windows 8.x или классическом приложении, где времязатратная операция потока может заблокировать поток пользовательского интерфейса и создать впечатление, что приложение не работает. Асинхронные методы используются в сочетании с asyncawait ключевыми словами в Visual Basic и C#.

Копирование начинается с текущей позиции в текущем потоке.

Пример копирования между двумя потоками см. в разделе перегрузки CopyToAsync(Stream) .

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

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