Переработка пула соединений

С выпуском Aspose.Email 19.3 пул соединений был переработан. Новый EmailClient класс был введён, который в конечном итоге заменит CredentialsByHostClient класс. The EmailClient класс предоставляет ConnectionAsgmtMode свойства, которое определяет режим распределения соединений в многопоточной среде. EmailClient.ConnectionAsgmtMode устанавливается с помощью ConnectionAsgmtType перечисление.

Типы соединений

Существует три типа соединений:

  • Основное соединение: это соединение, создаваемое и освобождаемое вместе с почтовым клиентом. Оно не может быть создано или освобождено вручную.
  • Соединение по умолчанию: пользователь может создавать соединения по умолчанию для потоков с помощью CreateConnection метод. Если соединение по умолчанию существует, все методы почтового клиента, выполняемые в потоке, будут неявно использовать это соединение. На каждый поток может существовать только одно соединение по умолчанию. Оно может создаваться вручную или автоматически. Это зависит от свойства EmailClient.ConnectionAsgmtMode. Такие соединения можно создать вручную с помощью EmailClient.CreateConnection(createAsDefaultConnection = true) метод. Если соединение по умолчанию не используется (зависит от режима распределения соединений), вместо него неявно используется основное соединение.
  • Независимые соединения: это соединения, не связанные с потоками. Их можно создавать вручную и они должны использоваться явно в качестве параметра метода. Такие соединения можно создать вручную с помощью EmailClient.CreateConnection() метод или EmailClient.CreateConnection(createAsDefaultConnection = false) метод.

Типы распределения соединений

Чтобы настроить EmailClient.ConnectionAsgmtMode свойство, ConnectionAsgmtType используется перечисление. Типы распределения, предоставляемые ConnectionAsgmtType перечислены ниже.

  • ConnectionAsgmtType.UseMainOrDefault Этот режим используется по умолчанию в почтовых клиентах. Почтовый клиент использует основное соединение для всех операций из нескольких потоков, если соединение по умолчанию не было создано или если соединение не было передано явно в качестве параметра метода. Основное соединение — это соединение, создаваемое одновременно с клиентом электронной почты. Пользователь может создавать соединения по умолчанию для потоков с помощью CreateConnection метод. Если соединение по умолчанию для потока создано, оно используется неявно для всех методов почтового клиента, вызываемых в этом потоке. Если соединение по умолчанию для потока не создано, основное соединение используется для всех методов почтового клиента, вызываемых в этом потоке. Пользователь также может создавать соединения, не связанные с потоками (не соединения по умолчанию), с помощью CreateConnection метод. Если пользователь хочет использовать другие соединения (не основной и не по умолчанию), он должен передать это соединение явно в качестве параметра метода, который собирается вызвать. Пользователь также может создать произвольное количество соединений. Соединение по умолчанию может быть только одно на поток. Обратите внимание, что соединения по умолчанию работают корректно, если пользователь использует объекты Thread для многозадачного программирования. Если пользователь использует ConnectionPool или объекты Task для многозадачности, этот режим может привести к неправильному поведению приложения. Чтобы избежать этой проблемы, пользователь должен вручную освободить соединение по умолчанию (если он его использует) в конце выполнения кода.
  • ConnectionAsgmtType.UseMain Почтовый клиент использует основное соединение для всех операций из нескольких потоков. Основное соединение — это соединение, создаваемое одновременно с клиентом электронной почты. Пользователь не может создавать соединения по умолчанию. Пользователь может создавать соединения, не связанные с потоками (не соединения по умолчанию), с помощью CreateConnection метод. Если пользователь хочет использовать другие соединения (не основной и не по умолчанию), он должен передать это соединение явно в качестве параметра метода, который собирается вызвать. 
  • ConnectionAsgmtType.UseDefault Почтовый клиент использует неявно только соединения по умолчанию для всех операций из нескольких потоков. Основное соединение в этом режиме не используется. Если соединение по умолчанию не было создано для какого‑то потока (первый вызов метода почтового клиента), клиент создаёт соединение по умолчанию неявно для потока перед выполнением первой операции. Пользователь не может создавать соединения по умолчанию для потоков с помощью CreateConnectionметод, потому что они создаются автоматически. Когда соединение по умолчанию для потока создаётся, оно используется неявно для всех методов почтового клиента, вызываемых в этом потоке. Пользователь также может создавать соединения, не связанные с потоками (не соединения по умолчанию), с помощью CreateConnectionметод. Если пользователь хочет использовать другие соединения (не основной и не по умолчанию), он должен передать это соединение явно в качестве параметра метода, который собирается вызвать. Пользователь также может создать произвольное количество соединений. На каждый поток может использоваться только одно соединение по умолчанию. Обратите внимание, что соединения по умолчанию работают корректно, если пользователь использует объекты Thread для многозадачного программирования. Если пользователь использует ConnectionPool или объекты Task для многозадачности, этот режим может привести к неправильному поведению приложения. Чтобы избежать этой проблемы, пользователь должен вручную освободить соединение по умолчанию в конце выполнения кода.