Usando Operações Assíncronas no EWSClient
Ao contrário dos métodos síncronos, os métodos assíncronos são não bloqueadores e permitem realizar várias solicitações simultaneamente. Os métodos assíncronos são nomeados com o sufixo Async.
NOTA: Métodos Async estão disponíveis em versões que visam .NET Core, .NET Framework 4.5 e posteriores.
Implementando IAsyncTokenProvider para obter Tokens OAuth Assincronamente
O seguinte exemplo de código define uma classe SomeAsyncTokenProvider
, que implementa a interface IAsyncTokenProvider.
A classe implementa o método assíncrono GetAccessTokenAsync que retorna uma Task do tipo OAuthToken. Este método busca um OAuthToken válido de forma assíncrona.
private class SomeAsyncTokenProvider : IAsyncTokenProvider
{
public SomeAsyncTokenProvider( /*alguns parâmetros*/)
{
...
}
public async Task<OAuthToken> GetAccessTokenAsync(bool ignoreExistingToken = false,
CancellationToken cancellationToken = default)
{
//Algum código assíncrono para obter um OAuthToken válido
...
}
public void Dispose()
{
...
}
}
Criando a IAsyncEwsClientInstance
O próximo exemplo de código obtém um cliente Exchange Web Services (EWS) de forma assíncrona usando autenticação OAuth. O código executa os seguintes passos:
- Cria um novo objeto CancellationToken que pode ser usado para cancelar operações assíncronas.
- Instancia a classe
SomeAsyncTokenProvider
que implementa a interface IAsyncTokenProvider. Esta classe é usada como um parâmetro para construir um novo objeto OAuthNetworkCredential. - Define a URI da caixa de correio para o endpoint do Exchange Web Services.
- Chama o método GetEwsClientAsync da classe EWSClient com a
mailboxUri
e o objetoOAuthNetworkCredential
como parâmetros. Este método retorna um objeto Task, portanto, aguarda o resultado antes de continuar. O objetocancellationToken
é passado como um parâmetro opcional para o método GetEwsClientAsync.
//O cancellationToken pode ser usado
var cancellationToken = new CancellationToken();
//Criar IAsyncEwsClientInstance
IAsyncTokenProvider tokenProvider = new SomeAsyncTokenProvider(/*alguns parâmetros*/);
const string mailboxUri = "https://outlook.office365.com/ews/exchange.asmx";
var ewsClient = await EWSClient.GetEwsClientAsync(mailboxUri, new OAuthNetworkCredential(tokenProvider),
cancellationToken: cancellationToken);
Enviando uma Mensagem
O exemplo de código abaixo está tentando enviar uma mensagem de email de forma assíncrona. O código executa os seguintes passos:
- Cria um novo objeto MailMessage com os parâmetros da mensagem.
- Chama o método SendAsync do objeto EWSClient, passando o MailMessage como parâmetro. O método é aguardado, pois retorna um objeto Task. O objeto
cancellationToken
é passado como um parâmetro opcional para o método SendAsync.
MailMessage message = new MailMessage("from@aspose.com", "to@aspose.com", "Algum assunto", "Algum corpo");
await ewsClient.SendAsync(message, cancellationToken: cancellationToken);
Buscando uma Mensagem com Anexos
Para buscar uma mensagem de email de forma assíncrona, use o seguinte exemplo de código com os passos descritos abaixo:
-
Chame o método FetchItemAsync de um EWSclient. O método leva dois parâmetros:
messageUri
é uma string que representa a URI da mensagem a ser buscadacancellationToken
é um parâmetro opcional que pode ser usado para cancelar a operação assíncrona. O método retorna um objeto Task que resolve para um objeto MapiMessage quando a operação assíncrona estiver completa. A palavra-chave “await” é usada para esperar que o objeto Task seja concluído antes de prosseguir.
-
Atribua à variável
fetched
o resultado da Task concluída, que é um objeto MapiMessage contendo os dados da mensagem buscada.var fetched = await ewsClient.FetchItemAsync(messageUri, cancellationToken: cancellationToken);
Anexando Mensagens
O exemplo de código abaixo está tentando anexar mensagens de email de forma assíncrona. O código executa os seguintes passos:
-
Chama o método AppendMessagesAsync do objeto EWSclient. O método leva um objeto EwsAppendMessage que contém parâmetros: as mensagens a serem anexadas, a URI da pasta de destino e o token de cancelamento.
-
Cria o objeto EwsAppendMessage usando o método Create e o configura com as seguintes chamadas de método:
- AddMessage adiciona uma mensagem à operação de anexo.
- SetFolder define a URI da pasta de destino para a operação de anexo.
- SetCancellationToken define o token de cancelamento que pode ser usado para cancelar a operação assíncrona.
-
O método AppendMessagesAsync retorna um objeto Task que resolve para um objeto IEnumerable
quando a operação assíncrona estiver completa. A palavra-chave “await” é usada para esperar que o objeto Task seja concluído antes de prosseguir. -
A variável
uris
é atribuída ao resultado da Task concluída, que é um objeto IEnumerablecontendo as URIs das mensagens anexadas.
IEnumerable<string> uris = await ewsClient.AppendMessagesAsync(
EwsAppendMessage.Create()
.AddMessage(message)
.AddMessage(fetched)
.SetFolder(folderUri)
.SetCancellationToken(cancellationToken));
Copiando Itens
O exemplo de código abaixo mostra como copiar itens e executa os seguintes passos:
-
Chama o método CopyItemAsync do objeto EWSClient. O método leva três parâmetros:
messageUri
é uma string que representa a URI da mensagem a ser copiadadestinationFolderUri
é uma string que representa a URI da pasta de destinocancellationToken
é um parâmetro opcional que pode ser usado para cancelar a operação assíncrona.
O método retorna um objeto Task que resolve para uma string quando a operação assíncrona estiver completa. A palavra-chave “await” é usada para esperar que o objeto Task seja concluído antes de prosseguir.
-
A variável
newItemUri
é atribuída ao resultado da Task concluída, que é uma string contendo a URI da nova cópia da mensagem.
string newItemUri = await ewsClient.CopyItemAsync(messageUri, destinationFolderUri, cancellationToken);
Deletando Itens
O seguinte código está tentando deletar uma mensagem de email de forma assíncrona.
Ele chama o método DeleteItemAsync de um objeto EWSClient. O método leva três parâmetros:
newItemUri
é uma string que representa a URI do item a ser deletadoDeletionOptions.DeletePermanently
especifica que o item deve ser deletado permanentementecancellationToken
é um parâmetro opcional que pode ser usado para cancelar a operação assíncrona.
O método retorna um objeto Task que é concluído quando a operação assíncrona estiver completa. A palavra-chave “await” é usada para esperar que o objeto Task seja concluído antes de prosseguir.
await ewsClient.DeleteItemAsync(newItemUri, DeletionOptions.DeletePermanently, cancellationToken);
Deletando Pastas
O seguinte código está tentando deletar uma pasta de forma assíncrona.
Ele chama o método DeleteFolderAsync de um objeto EWSClient. O método leva três parâmetros:
folderUri
é uma string que representa a URI da pasta a ser deletadadeletePermanently
especifica se a pasta deve ser deletada permanentemente ou movida para a pasta “Itens Excluídos”cancellationToken
é um parâmetro opcional que pode ser usado para cancelar a operação assíncrona.
O método retorna um objeto Task que é concluído quando a operação assíncrona estiver completa. A palavra-chave “await” é usada para esperar que o objeto Task seja concluído antes de prosseguir.
const bool deletePermanently = true;
await ewsClient.DeleteFolderAsync(folderUri, deletePermanently, cancellationToken);
Atualizando Itens
O exemplo de código abaixo está tentando atualizar um item de forma assíncrona. Ele executa os seguintes passos:
- Cria um objeto EwsUpdateItem usando o método Create, passando um objeto item. O EwsUpdateItem representa os parâmetros da operação de atualização. O método SetCancellationToken é chamado no objeto EwsUpdateItem, passando o parâmetro
cancellationToken
, que é um parâmetro opcional que pode ser usado para cancelar a operação assíncrona. - Passa o objeto EwsUpdateItem como parâmetro para o método UpdateItemAsync de um objeto EWSClient.
- O método UpdateItemAsync retorna um objeto Task que é concluído quando a operação assíncrona estiver completa. A palavra-chave “await” é usada para esperar que o objeto Task seja concluído antes de prosseguir.
await ewsClient.UpdateItemAsync(
EwsUpdateItem.Create(mapiNote)
.SetCancellationToken(cancellationToken));