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

С выпуском 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 для многозадачности, этот режим может привести к неправильному поведению приложения. Чтобы избежать этой проблемы, пользователь должен вручную освободить соединение по умолчанию в конце выполнения кода.