WebClient Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Fornece métodos comuns para enviar dados e receber dados de um recurso identificado por um URI.
public ref class WebClient : System::ComponentModel::Component
public ref class WebClient sealed : System::ComponentModel::Component
public class WebClient : System.ComponentModel.Component
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class WebClient : System.ComponentModel.Component
[System.Runtime.InteropServices.ComVisible(true)]
public class WebClient : System.ComponentModel.Component
type WebClient = class
inherit Component
[<System.Runtime.InteropServices.ComVisible(true)>]
type WebClient = class
inherit Component
Public Class WebClient
Inherits Component
Public NotInheritable Class WebClient
Inherits Component
- Herança
- Atributos
Exemplos
O exemplo de código a seguir usa o URI de um recurso, recupera-o e exibe a resposta.
#using <System.dll>
using namespace System;
using namespace System::Net;
using namespace System::IO;
int main()
{
array<String^>^args = Environment::GetCommandLineArgs();
if ( args == nullptr || args->Length == 1 )
{
throw gcnew ApplicationException( "Specify the URI of the resource to retrieve." );
}
WebClient^ client = gcnew WebClient;
// Add a user agent header in case the
// requested URI contains a query.
client->Headers->Add( "user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)" );
Stream^ data = client->OpenRead( args[ 1 ] );
StreamReader^ reader = gcnew StreamReader( data );
String^ s = reader->ReadToEnd();
Console::WriteLine( s );
data->Close();
reader->Close();
delete client;
}
using System;
using System.Net;
using System.IO;
public class Test
{
public static void Main(string[] args)
{
if (args == null || args.Length == 0)
{
throw new ApplicationException("Specify the URI of the resource to retrieve.");
}
using WebClient client = new WebClient();
// Add a user agent header in case the
// requested URI contains a query.
client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
using Stream data = client.OpenRead(args[0]);
using StreamReader reader = new StreamReader(data);
string s = reader.ReadToEnd();
Console.WriteLine(s);
}
}
Imports System.Net
Imports System.IO
Public Class Test
Public Shared Sub Main(args() As String)
If args Is Nothing OrElse args.Length = 0 Then
Throw New ApplicationException("Specify the URI of the resource to retrieve.")
End If
Using client As New WebClient()
' Add a user agent header in case the
' requested URI contains a query.
client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)")
Using data As Stream = client.OpenRead(args(0))
Using reader As New StreamReader(data)
Dim s As String = reader.ReadToEnd()
Console.WriteLine(s)
End Using
End Using
End Using
End Sub
End Class
Comentários
Cuidado
WebRequest
, HttpWebRequest
, ServicePoint
e WebClient
estão obsoletos e você não deve usá-los para um novo desenvolvimento. Em vez disso, use HttpClient.
A classe WebClient fornece métodos comuns para enviar dados ou receber dados de qualquer recurso local, intranet ou internet identificado por um URI.
A classe WebClient usa a classe WebRequest para fornecer acesso aos recursos. WebClient instâncias podem acessar dados com qualquer descendente WebRequest registrado com o método WebRequest.RegisterPrefix.
Nota
Por padrão, o .NET Framework dá suporte a URIs que começam com identificadores de esquema http:
, https:
, ftp:
e file:
.
A tabela a seguir descreve WebClient métodos para carregar dados em um recurso.
Método | Descrição |
---|---|
OpenWrite | Recupera um Stream usado para enviar dados para o recurso. |
OpenWriteAsync | Recupera um Stream usado para enviar dados para o recurso, sem bloquear o thread de chamada. |
UploadData | Envia uma matriz de bytes para o recurso e retorna uma matriz de Byte que contém qualquer resposta. |
UploadDataAsync | Envia uma matriz de Byte para o recurso, sem bloquear o thread de chamada. |
UploadFile | Envia um arquivo local para o recurso e retorna uma matriz de Byte que contém qualquer resposta. |
UploadFileAsync | Envia um arquivo local para o recurso, sem bloquear o thread de chamada. |
UploadValues | Envia um NameValueCollection para o recurso e retorna uma matriz de Byte que contém qualquer resposta. |
UploadValuesAsync | Envia um NameValueCollection para o recurso e retorna uma matriz de Byte que contém qualquer resposta, sem bloquear o thread de chamada. |
UploadString | Envia um String para o recurso e retorna um String que contém qualquer resposta. |
UploadStringAsync | Envia um String para o recurso, sem bloquear o thread de chamada. |
A tabela a seguir descreve WebClient métodos para baixar dados de um recurso.
Método | Descrição |
---|---|
OpenRead | Retorna os dados de um recurso como um Stream. |
OpenReadAsync | Retorna os dados de um recurso, sem bloquear o thread de chamada. |
DownloadData | Baixa dados de um recurso e retorna uma matriz de Byte. |
DownloadDataAsync | Baixa dados de um recurso e retorna uma matriz de Byte, sem bloquear o thread de chamada. |
DownloadFile | Baixa dados de um recurso para um arquivo local. |
DownloadFileAsync | Baixa dados de um recurso para um arquivo local, sem bloquear o thread de chamada. |
DownloadString | Baixa um String de um recurso e retorna um String. |
DownloadStringAsync | Baixa um String de um recurso, sem bloquear o thread de chamada. |
Você pode usar o método CancelAsync para tentar cancelar operações assíncronas.
Uma instância de WebClient não envia cabeçalhos HTTP opcionais por padrão. Se sua solicitação exigir um cabeçalho opcional, você deverá adicionar o cabeçalho à coleção Headers. Por exemplo, para reter consultas na resposta, você deve adicionar um cabeçalho de agente de usuário. Além disso, os servidores poderão retornar 500 (Erro interno do servidor) se o cabeçalho do agente do usuário estiver ausente.
AllowAutoRedirect está definido como true
em instâncias de WebClient.
Notas aos Herdeiros
Classes derivadas devem chamar a implementação da classe base de WebClient para garantir que a classe derivada funcione conforme o esperado.
Construtores
WebClient() |
Obsoleto.
Inicializa uma nova instância da classe WebClient. |
Propriedades
AllowReadStreamBuffering |
Obsoleto.
Obtém ou define um valor que indica se os dados lidos do recurso da Internet devem ser armazenados em buffer para uma instância de WebClient. |
AllowWriteStreamBuffering |
Obsoleto.
Obtém ou define um valor que indica se os dados gravados no recurso da Internet devem ser armazenados em buffer para uma instância de WebClient. |
BaseAddress |
Obtém ou define o URI base para solicitações feitas por um WebClient. |
CachePolicy |
Obtém ou define a política de cache do aplicativo para todos os recursos obtidos por essa instância do WebClient usando objetos WebRequest. |
CanRaiseEvents |
Obtém um valor que indica se o componente pode gerar um evento. (Herdado de Component) |
Container |
Obtém o IContainer que contém o Component. (Herdado de Component) |
Credentials |
Obtém ou define as credenciais de rede que são enviadas para o host e usadas para autenticar a solicitação. |
DesignMode |
Obtém um valor que indica se o Component está atualmente no modo de design. (Herdado de Component) |
Encoding |
Obtém ou define o Encoding usado para carregar e baixar cadeias de caracteres. |
Events |
Obtém a lista de manipuladores de eventos anexados a este Component. (Herdado de Component) |
Headers |
Obtém ou define uma coleção de pares nome/valor de cabeçalho associados à solicitação. |
IsBusy |
Obtém se uma solicitação da Web está em andamento. |
Proxy |
Obtém ou define o proxy usado por este objeto WebClient. |
QueryString |
Obtém ou define uma coleção de pares nome/valor de consulta associados à solicitação. |
ResponseHeaders |
Obtém uma coleção de pares nome/valor de cabeçalho associados à resposta. |
Site |
Obtém ou define o ISite do Component. (Herdado de Component) |
UseDefaultCredentials |
Obtém ou define um valor Boolean que controla se os DefaultCredentials são enviados com solicitações. |
Métodos
CancelAsync() |
Cancela uma operação assíncrona pendente. |
CreateObjRef(Type) |
Cria um objeto que contém todas as informações relevantes necessárias para gerar um proxy usado para se comunicar com um objeto remoto. (Herdado de MarshalByRefObject) |
Dispose() |
Libera todos os recursos usados pelo Component. (Herdado de Component) |
Dispose(Boolean) |
Libera os recursos não gerenciados usados pelo Component e, opcionalmente, libera os recursos gerenciados. (Herdado de Component) |
DownloadData(String) |
Baixa o recurso como uma matriz de Byte do URI especificado. |
DownloadData(Uri) |
Baixa o recurso como uma matriz de Byte do URI especificado. |
DownloadDataAsync(Uri) |
Baixa o recurso como uma matriz Byte do URI especificado como uma operação assíncrona. |
DownloadDataAsync(Uri, Object) |
Baixa o recurso como uma matriz Byte do URI especificado como uma operação assíncrona. |
DownloadDataTaskAsync(String) |
Baixa o recurso como uma matriz Byte do URI especificado como uma operação assíncrona usando um objeto de tarefa. |
DownloadDataTaskAsync(Uri) |
Baixa o recurso como uma matriz Byte do URI especificado como uma operação assíncrona usando um objeto de tarefa. |
DownloadFile(String, String) |
Baixa o recurso com o URI especificado em um arquivo local. |
DownloadFile(Uri, String) |
Baixa o recurso com o URI especificado em um arquivo local. |
DownloadFileAsync(Uri, String) |
Baixa, em um arquivo local, o recurso com o URI especificado. Esse método não bloqueia o thread de chamada. |
DownloadFileAsync(Uri, String, Object) |
Baixa, em um arquivo local, o recurso com o URI especificado. Esse método não bloqueia o thread de chamada. |
DownloadFileTaskAsync(String, String) |
Baixa o recurso especificado em um arquivo local como uma operação assíncrona usando um objeto de tarefa. |
DownloadFileTaskAsync(Uri, String) |
Baixa o recurso especificado em um arquivo local como uma operação assíncrona usando um objeto de tarefa. |
DownloadString(String) |
Baixa o recurso solicitado como um String. O recurso a ser baixado é especificado como um String que contém o URI. |
DownloadString(Uri) |
Baixa o recurso solicitado como um String. O recurso a ser baixado é especificado como um Uri. |
DownloadStringAsync(Uri) |
Baixa o recurso especificado como um Uri. Esse método não bloqueia o thread de chamada. |
DownloadStringAsync(Uri, Object) |
Baixa a cadeia de caracteres especificada para o recurso especificado. Esse método não bloqueia o thread de chamada. |
DownloadStringTaskAsync(String) |
Baixa o recurso como um String do URI especificado como uma operação assíncrona usando um objeto de tarefa. |
DownloadStringTaskAsync(Uri) |
Baixa o recurso como um String do URI especificado como uma operação assíncrona usando um objeto de tarefa. |
Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
GetHashCode() |
Serve como a função de hash padrão. (Herdado de Object) |
GetLifetimeService() |
Obsoleto.
Recupera o objeto de serviço de tempo de vida atual que controla a política de tempo de vida para essa instância. (Herdado de MarshalByRefObject) |
GetService(Type) |
Retorna um objeto que representa um serviço fornecido pelo Component ou por seu Container. (Herdado de Component) |
GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
GetWebRequest(Uri) |
Retorna um objeto WebRequest para o recurso especificado. |
GetWebResponse(WebRequest) |
Retorna o WebResponse do WebRequestespecificado. |
GetWebResponse(WebRequest, IAsyncResult) |
Retorna o WebResponse do WebRequest especificado usando o IAsyncResultespecificado. |
InitializeLifetimeService() |
Obsoleto.
Obtém um objeto de serviço de tempo de vida para controlar a política de tempo de vida dessa instância. (Herdado de MarshalByRefObject) |
MemberwiseClone() |
Cria uma cópia superficial do Objectatual. (Herdado de Object) |
MemberwiseClone(Boolean) |
Cria uma cópia superficial do objeto MarshalByRefObject atual. (Herdado de MarshalByRefObject) |
OnDownloadDataCompleted(DownloadDataCompletedEventArgs) |
Gera o evento DownloadDataCompleted. |
OnDownloadFileCompleted(AsyncCompletedEventArgs) |
Gera o evento DownloadFileCompleted. |
OnDownloadProgressChanged(DownloadProgressChangedEventArgs) |
Gera o evento DownloadProgressChanged. |
OnDownloadStringCompleted(DownloadStringCompletedEventArgs) |
Gera o evento DownloadStringCompleted. |
OnOpenReadCompleted(OpenReadCompletedEventArgs) |
Gera o evento OpenReadCompleted. |
OnOpenWriteCompleted(OpenWriteCompletedEventArgs) |
Gera o evento OpenWriteCompleted. |
OnUploadDataCompleted(UploadDataCompletedEventArgs) |
Gera o evento UploadDataCompleted. |
OnUploadFileCompleted(UploadFileCompletedEventArgs) |
Gera o evento UploadFileCompleted. |
OnUploadProgressChanged(UploadProgressChangedEventArgs) |
Gera o evento UploadProgressChanged. |
OnUploadStringCompleted(UploadStringCompletedEventArgs) |
Gera o evento UploadStringCompleted. |
OnUploadValuesCompleted(UploadValuesCompletedEventArgs) |
Gera o evento UploadValuesCompleted. |
OnWriteStreamClosed(WriteStreamClosedEventArgs) |
Obsoleto.
Gera o evento WriteStreamClosed. |
OpenRead(String) |
Abre um fluxo legível para os dados baixados de um recurso com o URI especificado como um String. |
OpenRead(Uri) |
Abre um fluxo legível para os dados baixados de um recurso com o URI especificado como um Uri. |
OpenReadAsync(Uri) |
Abre um fluxo legível que contém o recurso especificado. Esse método não bloqueia o thread de chamada. |
OpenReadAsync(Uri, Object) |
Abre um fluxo legível que contém o recurso especificado. Esse método não bloqueia o thread de chamada. |
OpenReadTaskAsync(String) |
Abre um fluxo legível que contém o recurso especificado como uma operação assíncrona usando um objeto de tarefa. |
OpenReadTaskAsync(Uri) |
Abre um fluxo legível que contém o recurso especificado como uma operação assíncrona usando um objeto de tarefa. |
OpenWrite(String) |
Abre um fluxo para gravar dados no recurso especificado. |
OpenWrite(String, String) |
Abre um fluxo para gravar dados no recurso especificado, usando o método especificado. |
OpenWrite(Uri) |
Abre um fluxo para gravar dados no recurso especificado. |
OpenWrite(Uri, String) |
Abre um fluxo para gravar dados no recurso especificado usando o método especificado. |
OpenWriteAsync(Uri) |
Abre um fluxo para gravar dados no recurso especificado. Esse método não bloqueia o thread de chamada. |
OpenWriteAsync(Uri, String) |
Abre um fluxo para gravar dados no recurso especificado. Esse método não bloqueia o thread de chamada. |
OpenWriteAsync(Uri, String, Object) |
Abre um fluxo para gravar dados no recurso especificado, usando o método especificado. Esse método não bloqueia o thread de chamada. |
OpenWriteTaskAsync(String) |
Abre um fluxo para gravar dados no recurso especificado como uma operação assíncrona usando um objeto de tarefa. |
OpenWriteTaskAsync(String, String) |
Abre um fluxo para gravar dados no recurso especificado como uma operação assíncrona usando um objeto de tarefa. |
OpenWriteTaskAsync(Uri) |
Abre um fluxo para gravar dados no recurso especificado como uma operação assíncrona usando um objeto de tarefa. |
OpenWriteTaskAsync(Uri, String) |
Abre um fluxo para gravar dados no recurso especificado como uma operação assíncrona usando um objeto de tarefa. |
ToString() |
Retorna um String que contém o nome do Component, se houver. Esse método não deve ser substituído. (Herdado de Component) |
UploadData(String, Byte[]) |
Carrega um buffer de dados em um recurso identificado por um URI. |
UploadData(String, String, Byte[]) |
Carrega um buffer de dados para o recurso especificado, usando o método especificado. |
UploadData(Uri, Byte[]) |
Carrega um buffer de dados em um recurso identificado por um URI. |
UploadData(Uri, String, Byte[]) |
Carrega um buffer de dados para o recurso especificado, usando o método especificado. |
UploadDataAsync(Uri, Byte[]) |
Carrega um buffer de dados em um recurso identificado por um URI usando o método POST. Esse método não bloqueia o thread de chamada. |
UploadDataAsync(Uri, String, Byte[]) |
Carrega um buffer de dados em um recurso identificado por um URI usando o método especificado. Esse método não bloqueia o thread de chamada. |
UploadDataAsync(Uri, String, Byte[], Object) |
Carrega um buffer de dados em um recurso identificado por um URI, usando o método especificado e identificando o token. |
UploadDataTaskAsync(String, Byte[]) |
Carrega um buffer de dados que contém uma matriz Byte para o URI especificado como uma operação assíncrona usando um objeto de tarefa. |
UploadDataTaskAsync(String, String, Byte[]) |
Carrega um buffer de dados que contém uma matriz Byte para o URI especificado como uma operação assíncrona usando um objeto de tarefa. |
UploadDataTaskAsync(Uri, Byte[]) |
Carrega um buffer de dados que contém uma matriz Byte para o URI especificado como uma operação assíncrona usando um objeto de tarefa. |
UploadDataTaskAsync(Uri, String, Byte[]) |
Carrega um buffer de dados que contém uma matriz Byte para o URI especificado como uma operação assíncrona usando um objeto de tarefa. |
UploadFile(String, String) |
Carrega o arquivo local especificado em um recurso com o URI especificado. |
UploadFile(String, String, String) |
Carrega o arquivo local especificado para o recurso especificado, usando o método especificado. |
UploadFile(Uri, String) |
Carrega o arquivo local especificado em um recurso com o URI especificado. |
UploadFile(Uri, String, String) |
Carrega o arquivo local especificado para o recurso especificado, usando o método especificado. |
UploadFileAsync(Uri, String) |
Carrega o arquivo local especificado para o recurso especificado, usando o método POST. Esse método não bloqueia o thread de chamada. |
UploadFileAsync(Uri, String, String) |
Carrega o arquivo local especificado para o recurso especificado, usando o método POST. Esse método não bloqueia o thread de chamada. |
UploadFileAsync(Uri, String, String, Object) |
Carrega o arquivo local especificado para o recurso especificado, usando o método POST. Esse método não bloqueia o thread de chamada. |
UploadFileTaskAsync(String, String) |
Carrega o arquivo local especificado em um recurso como uma operação assíncrona usando um objeto de tarefa. |
UploadFileTaskAsync(String, String, String) |
Carrega o arquivo local especificado em um recurso como uma operação assíncrona usando um objeto de tarefa. |
UploadFileTaskAsync(Uri, String) |
Carrega o arquivo local especificado em um recurso como uma operação assíncrona usando um objeto de tarefa. |
UploadFileTaskAsync(Uri, String, String) |
Carrega o arquivo local especificado em um recurso como uma operação assíncrona usando um objeto de tarefa. |
UploadString(String, String) |
Carrega a cadeia de caracteres especificada para o recurso especificado, usando o método POST. |
UploadString(String, String, String) |
Carrega a cadeia de caracteres especificada para o recurso especificado, usando o método especificado. |
UploadString(Uri, String) |
Carrega a cadeia de caracteres especificada para o recurso especificado, usando o método POST. |
UploadString(Uri, String, String) |
Carrega a cadeia de caracteres especificada para o recurso especificado, usando o método especificado. |
UploadStringAsync(Uri, String) |
Carrega a cadeia de caracteres especificada para o recurso especificado. Esse método não bloqueia o thread de chamada. |
UploadStringAsync(Uri, String, String) |
Carrega a cadeia de caracteres especificada para o recurso especificado. Esse método não bloqueia o thread de chamada. |
UploadStringAsync(Uri, String, String, Object) |
Carrega a cadeia de caracteres especificada para o recurso especificado. Esse método não bloqueia o thread de chamada. |
UploadStringTaskAsync(String, String) |
Carrega a cadeia de caracteres especificada para o recurso especificado como uma operação assíncrona usando um objeto de tarefa. |
UploadStringTaskAsync(String, String, String) |
Carrega a cadeia de caracteres especificada para o recurso especificado como uma operação assíncrona usando um objeto de tarefa. |
UploadStringTaskAsync(Uri, String) |
Carrega a cadeia de caracteres especificada para o recurso especificado como uma operação assíncrona usando um objeto de tarefa. |
UploadStringTaskAsync(Uri, String, String) |
Carrega a cadeia de caracteres especificada para o recurso especificado como uma operação assíncrona usando um objeto de tarefa. |
UploadValues(String, NameValueCollection) |
Carrega a coleção de nome/valor especificada para o recurso identificado pelo URI especificado. |
UploadValues(String, String, NameValueCollection) |
Carrega a coleção de nome/valor especificada para o recurso identificado pelo URI especificado, usando o método especificado. |
UploadValues(Uri, NameValueCollection) |
Carrega a coleção de nome/valor especificada para o recurso identificado pelo URI especificado. |
UploadValues(Uri, String, NameValueCollection) |
Carrega a coleção de nome/valor especificada para o recurso identificado pelo URI especificado, usando o método especificado. |
UploadValuesAsync(Uri, NameValueCollection) |
Carrega os dados na coleção de nome/valor especificado para o recurso identificado pelo URI especificado. Esse método não bloqueia o thread de chamada. |
UploadValuesAsync(Uri, String, NameValueCollection) |
Carrega os dados na coleção de nome/valor especificado para o recurso identificado pelo URI especificado, usando o método especificado. Esse método não bloqueia o thread de chamada. |
UploadValuesAsync(Uri, String, NameValueCollection, Object) |
Carrega os dados na coleção de nome/valor especificado para o recurso identificado pelo URI especificado, usando o método especificado. Esse método não bloqueia o thread de chamada e permite que o chamador passe um objeto para o método que é invocado quando a operação é concluída. |
UploadValuesTaskAsync(String, NameValueCollection) |
Carrega a coleção de nome/valor especificada para o recurso identificado pelo URI especificado como uma operação assíncrona usando um objeto de tarefa. |
UploadValuesTaskAsync(String, String, NameValueCollection) |
Carrega a coleção de nome/valor especificada para o recurso identificado pelo URI especificado como uma operação assíncrona usando um objeto de tarefa. |
UploadValuesTaskAsync(Uri, NameValueCollection) |
Carrega a coleção de nome/valor especificada para o recurso identificado pelo URI especificado como uma operação assíncrona usando um objeto de tarefa. |
UploadValuesTaskAsync(Uri, String, NameValueCollection) |
Carrega a coleção de nome/valor especificada para o recurso identificado pelo URI especificado como uma operação assíncrona usando um objeto de tarefa. |
Eventos
Disposed |
Ocorre quando o componente é descartado por uma chamada para o método Dispose(). (Herdado de Component) |
DownloadDataCompleted |
Ocorre quando uma operação de download de dados assíncrona é concluída. |
DownloadFileCompleted |
Ocorre quando uma operação de download de arquivo assíncrono é concluída. |
DownloadProgressChanged |
Ocorre quando uma operação de download assíncrona transfere com êxito alguns ou todos os dados. |
DownloadStringCompleted |
Ocorre quando uma operação assíncrona de download de recursos é concluída. |
OpenReadCompleted |
Ocorre quando uma operação assíncrona para abrir um fluxo que contém um recurso é concluída. |
OpenWriteCompleted |
Ocorre quando uma operação assíncrona para abrir um fluxo para gravar dados em um recurso é concluída. |
UploadDataCompleted |
Ocorre quando uma operação assíncrona de upload de dados é concluída. |
UploadFileCompleted |
Ocorre quando uma operação assíncrona de upload de arquivo é concluída. |
UploadProgressChanged |
Ocorre quando uma operação de upload assíncrona transfere com êxito alguns ou todos os dados. |
UploadStringCompleted |
Ocorre quando uma operação assíncrona de carregamento de cadeia de caracteres é concluída. |
UploadValuesCompleted |
Ocorre quando um upload assíncrono de uma coleção de nome/valor é concluído. |
WriteStreamClosed |
Obsoleto.
Ocorre quando uma operação assíncrona para gravar dados em um recurso usando um fluxo de gravação é fechada. |