Рефакторинг пула соединений
Contents
[
Hide
]
С выходом Aspose.Email 19.3 пул соединений был рефакторирован. Введен новый класс EmailClient, который в конечном итоге заменит класс CredentialsByHostClient. Класс 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 для многозадачного программирования, этот режим может привести к неправильному поведению приложения. Чтобы избежать этой проблемы, пользователь должен вручную удалить резервное соединение в конце выполнения кода.