Pool de Conexões Refatorado

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

Tipos de Conexões

Existem três tipos de conexões a seguir:

  • Conexão principal: Esta é a conexão criada e descartada junto 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 uma thread usarão implicitamente esta conexão. Apenas uma conexão padrão pode existir por thread. Pode ser criada manual ou automaticamente. Isso 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 é utilizada implicitamente em vez dela.
  • Conexões independentes: Estas são conexões que não estão vinculadas a threads. Podem ser criadas manualmente e devem ser usadas explicitamente como um parâmetro de método. Essas conexões podem ser criadas manualmente com o método EmailClient.CreateConnection() ou EmailClient.CreateConnection(createAsDefaultConnection = false).

Tipos de Alocação de Conexão

Para configurar a propriedade EmailClient.ConnectionAsgmtMode, utiliza-se o enumerável ConnectionAsgmtType. Os tipos de alocação fornecidos por 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 foi criada, ou se uma conexão não foi passada como parâmetro de método explicitamente. A conexão principal é uma conexão que é criada ao mesmo tempo que o 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 é utilizada 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 é utilizada 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 principais e não padrão), deve passar essa conexão explicitamente como um parâmetro de um método que deseja usar. O usuário pode ainda 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 multitarefa. Se o usuário usar ConnectionPool ou objetos Task para programação multitarefa, 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) ao final da execução do código.
  • ConnectionAsgmtType.UseMain: O cliente de e-mail utiliza a conexão principal para todas as operações de múltiplas threads. A conexão principal é uma 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 principais e não padrão), deve passar essa conexão explicitamente como um parâmetro de um método que deseja usar. 
  • ConnectionAsgmtType.UseDefault: O cliente de e-mail utiliza 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 foi criada para alguma thread (primeira invocação de método do cliente de e-mail), o cliente de e-mail cria a conexão padrão implicitamente para a thread antes que a primeira operação seja executada. O usuário não pode criar conexões padrão para threads com o método CreateConnection porque elas 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 pode também 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 principais e não padrão), deve passar essa conexão explicitamente como um parâmetro de um método que deseja usar. O usuário pode ainda criar qualquer número de conexões. Apenas uma conexão padrão pode ser utilizada por thread. Observe que as conexões padrão funcionam corretamente se o usuário usar objetos Thread para programação multitarefa. Se o usuário usar ConnectionPool ou objetos Task para programação multitarefa, 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 ao final da execução do código.