连接池重构
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 对象进行多任务编程,此模式可能导致应用程序行为错误。为避免此问题,用户必须在代码执行结束时手动释放默认连接。