Рефакторинг пула соединений

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

Типы подключений

Существуют следующие три типа подключения:

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

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

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

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