Pool de Conexões Refatorado

Com o lançamento do Aspose.Email 19.3, o pool de conexões foi refatorado. Uma nova EmailClient classe foi introduzida, que eventualmente substituirá a CredentialsByHostClient classe. A classe EmailClient fornece uma propriedade ConnectionAsgmtMode que define o modo de alocação de conexão em um ambiente multithread. O EmailClient.ConnectionAsgmtMode é definido usando o enumerável ConnectionAsgmtType.

Tipos de Conexões

Existem os seguintes três tipos de conexão:

  • A conexão principal: Esta é a conexão criada e descartada juntamente com o cliente de e-mail. Não pode ser criada ou descartada manualmente.
  • Conexão padrão: O usuário pode criar conexões padrão para threads com o método CreateConnection. Se a conexão padrão existir, todos os métodos do cliente de e-mail executados em um thread usarão implicitamente essa conexão. Apenas uma conexão padrão pode existir por thread. Ela pode ser criada manualmente ou automaticamente. Depende da propriedade EmailClient.ConnectionAsgmtMode. Essas conexões podem ser criadas manualmente com o método EmailClient.CreateConnection(createAsDefaultConnection = true). Se a conexão padrão não for utilizada (depende do modo de alocação de conexão), a conexão principal é usada implicitamente em seu lugar.
  • Conexões independentes: Estas são conexões que não estão vinculadas a threads. Elas podem ser criadas manualmente e devem ser utilizadas explicitamente como um parâmetro de método. Essas conexões podem ser criadas manualmente com o método EmailClient.CreateConnection() ou com o método EmailClient.CreateConnection(createAsDefaultConnection = false).

Tipos de Alocação de Conexões

Para configurar a propriedade EmailClient.ConnectionAsgmtMode, é utilizado o enumerável ConnectionAsgmtType. Os tipos de alocação fornecidos pelo ConnectionAsgmtType são listados abaixo.

  • ConnectionAsgmtType.UseMainOrDefault: Este modo é utilizado por padrão nos clientes de e-mail. O cliente de e-mail utiliza a conexão principal para todas as operações de múltiplas threads se a conexão padrão não tiver sido criada, ou se uma conexão não tiver sido passada como parâmetro de método explicitamente. A conexão principal é a conexão que é criada ao mesmo tempo que um cliente de e-mail. O usuário pode criar conexões padrão para threads com o método CreateConnection. Se a conexão padrão para uma thread for criada, ela é usada implicitamente para todos os métodos do cliente de e-mail que são invocados nesta thread. Se a conexão padrão para uma thread não for criada, a conexão principal é usada para todos os métodos do cliente de e-mail que são invocados nesta thread. O usuário também pode criar conexões não vinculadas a threads (não conexões padrão) com o método CreateConnection. Se o usuário quiser usar outras conexões (não principal e não padrão), ele deve passar essa conexão explicitamente como um parâmetro de um método que deseja usar. O usuário pode, adicionalmente, criar qualquer número de conexões. A conexão padrão pode ser apenas uma por thread. Observe que as conexões padrão funcionam corretamente se o usuário usar objetos Thread para programação multithreading. Se o usuário usar ConnectionPool ou usar objetos Task para programação multithreading, esse modo pode levar a um comportamento incorreto da aplicação. Para evitar esse problema, o usuário deve descartar manualmente a conexão padrão (se a estiver utilizando) no final da execução do código.
  • ConnectionAsgmtType.UseMain: O cliente de e-mail usa a conexão principal para todas as operações de múltiplas threads. A conexão principal é a conexão que é criada ao mesmo tempo que o cliente de e-mail. O usuário não pode criar conexões padrão. O usuário pode criar conexões não vinculadas a threads (não conexões padrão) com o método CreateConnection. Se o usuário quiser usar outras conexões (não principal e não padrão), ele deve passar essa conexão explicitamente como um parâmetro de um método que deseja usar.
  • ConnectionAsgmtType.UseDefault: O cliente de e-mail usa implicitamente apenas conexões padrão para todas as operações de múltiplas threads. A conexão principal não é utilizada neste modo. Se a conexão padrão não tiver sido criada para alguma thread (primeira invocação do método do cliente de e-mail), o cliente de e-mail cria implicitamente a conexão padrão para a thread antes da primeira operação ser executada. O usuário não pode criar conexões padrão para threads com o método CreateConnection porque são criadas automaticamente. Quando a conexão padrão para uma thread é criada, ela é utilizada implicitamente para todos os métodos do cliente de e-mail que são invocados nesta thread. O usuário também pode criar conexões que não estão vinculadas a threads (não conexões padrão) com o método CreateConnection. Se o usuário quiser usar outras conexões (não principal e não padrão), ele deve passar essa conexão explicitamente como um parâmetro de um método que deseja usar. O usuário pode, adicionalmente, criar qualquer número de conexões. Apenas uma conexão padrão pode ser usada por thread. Observe que as conexões padrão funcionam corretamente se o usuário usar objetos Thread para programação multithreading. Se o usuário usar ConnectionPool ou usar objetos Task para programação multithreading, esse modo pode levar a um comportamento incorreto da aplicação. Para evitar esse problema, o usuário deve descartar manualmente a conexão padrão no final da execução do código.