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
SomeAsyncTokenProviderque 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
mailboxUrie o objetoOAuthNetworkCredentialcomo 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
fetchedo 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.DeletePermanentlyespecifica 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 deletadadeletePermanentlyespecifica 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));