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:

  1. Cria um novo objeto CancellationToken que pode ser usado para cancelar operações assíncronas.
  2. Instancia a classe SomeAsyncTokenProvider que implementa a interface IAsyncTokenProvider. Esta classe é usada como um parâmetro para construir um novo objeto OAuthNetworkCredential.
  3. Define a URI da caixa de correio para o endpoint do Exchange Web Services.
  4. Chama o método GetEwsClientAsync da classe EWSClient com a mailboxUri e o objeto OAuthNetworkCredential como parâmetros. Este método retorna um objeto Task, portanto, aguarda o resultado antes de continuar. O objeto cancellationToken é 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:

  1. Cria um novo objeto MailMessage com os parâmetros da mensagem.
  2. 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:

  1. 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 buscada
    • cancellationToken é 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.
  2. 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:

  1. 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.

  2. 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.
  3. 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.

  4. A variável uris é atribuída ao resultado da Task concluída, que é um objeto IEnumerable contendo 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:

  1. 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 copiada
    • destinationFolderUri é uma string que representa a URI da pasta de destino
    • cancellationToken é 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.

  2. 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 deletado
  • DeletionOptions.DeletePermanently especifica que o item deve ser deletado permanentemente
  • 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.

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 deletada
  • deletePermanently 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:

  1. 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.
  2. Passa o objeto EwsUpdateItem como parâmetro para o método UpdateItemAsync de um objeto EWSClient.
  3. 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));