การปรับโครงสร้าง Connection Pool

กับการเปิดตัว Aspose.Email 19.3, pool การเชื่อมต่อได้ถูกปรับโครงสร้างใหม่ ใหม่ EmailClient ได้แนะนำคลาสที่จะมาทดแทน CredentialsByHostClient คลาส. เมธอด EmailClient คลาสให้ ConnectionAsgmtMode คุณสมบัติที่กำหนดโหมดการจัดสรรการเชื่อมต่อในสภาพแวดล้อมหลายเธรด EmailClient.ConnectionAsgmtMode ถูกตั้งค่าด้วย ConnectionAsgmtType enumerable.

ประเภทการเชื่อมต่อ

มีประเภทการเชื่อมต่อต่อไปนี้สามประเภท:

  • การเชื่อมต่อหลัก: คือการเชื่อมต่อที่สร้างและทำลายพร้อมกับไคลเอนต์อีเมล ไม่สามารถสร้างหรือทำลายด้วยตนเองได้
  • การเชื่อมต่อค่าเริ่มต้น: ผู้ใช้สามารถสร้างการเชื่อมต่อค่าเริ่มต้นสำหรับเธรดด้วย CreateConnection เมธอด หากการเชื่อมต่อค่าเริ่มต้นมีอยู่ เมธอดทั้งหมดของไคลเอนต์อีเมลที่ทำงานในเธรดจะใช้การเชื่อมต่อนี้โดยอัตโนมัติ สามารถมีการเชื่อมต่อค่าเริ่มต้นได้เพียงหนึ่งต่อเธรด สามารถสร้างด้วยตนเองหรืออัตโนมัติ ขึ้นอยู่กับคุณสมบัติ EmailClient.ConnectionAsgmtMode การเชื่อมต่อเหล่านี้สามารถสร้างด้วยตนเองโดยใช้ EmailClient.CreateConnection(createAsDefaultConnection = true) เมธอด หากการเชื่อมต่อค่าเริ่มต้นไม่ได้ใช้ (ขึ้นอยู่กับโหมดการจัดสรรการเชื่อมต่อ) การเชื่อมต่อหลักจะถูกใช้โดยอัตโนมัติแทน
  • การเชื่อมต่ออิสระ: คือการเชื่อมต่อที่ไม่ได้เชื่อมโยงกับเธรด สามารถสร้างด้วยตนเองและต้องใช้เป็นพารามิเตอร์ของเมธอดอย่างชัดเจน การเชื่อมต่อเหล่านี้สามารถสร้างด้วยตนเองโดยใช้ EmailClient.CreateConnection() เมธอดหรือ EmailClient.CreateConnection(createAsDefaultConnection = false) เมธอด.

ประเภทการจัดสรรการเชื่อมต่อ

เพื่อกำหนดค่า EmailClient.ConnectionAsgmtMode คุณสมบัติ, ConnectionAsgmtType enumerable ถูกใช้ ประเภทการจัดสรรที่ให้โดย ConnectionAsgmtType ได้แสดงด้านล่าง

  • ConnectionAsgmtType.UseMainOrDefault โหมดนี้เป็นค่าเริ่มต้นที่ใช้ในไคลเอนต์อีเมล ไคลเอนต์อีเมลใช้การเชื่อมต่อหลักสำหรับทุกการดำเนินการจากหลายเธรดหากการเชื่อมต่อค่าเริ่มต้นยังไม่ได้สร้าง หรือหากการเชื่อมต่อไม่ได้ถูกส่งเป็นพารามิเตอร์เมธอดอย่างชัดเจน การเชื่อมต่อหลักเป็นการเชื่อมต่อที่สร้างพร้อมกับไคลเอนต์อีเมล ผู้ใช้สามารถสร้างการเชื่อมต่อค่าเริ่มต้นสำหรับเธรดด้วย CreateConnection เมธอด หากการเชื่อมต่อค่าเริ่มต้นสำหรับเธรดถูกสร้าง จะถูกใช้โดยอัตโนมัติสำหรับทุกเมธอดของไคลเอนต์อีเมลที่เรียกในเธรดนั้น หากการเชื่อมต่อค่าเริ่มต้นสำหรับเธรดไม่ได้สร้าง การเชื่อมต่อหลักจะถูกใช้สำหรับทุกเมธอดของไคลเอนต์อีเมลที่เรียกในเธรดนั้น ผู้ใช้ยังสามารถสร้างการเชื่อมต่อที่ไม่เชื่อมโยงกับเธรด (ไม่ใช่ค่าเริ่มต้น) ด้วย CreateConnection เมธอด หากผู้ใช้ต้องการใช้การเชื่อมต่ออื่น (ไม่ใช่หลักและไม่ใช่ค่าเริ่มต้น) ผู้ใช้ต้องส่งการเชื่อมต่อนั้นอย่างชัดเจนเป็นพารามิเตอร์ของเมธอดที่ต้องการใช้ ผู้ใช้สามารถสร้างการเชื่อมต่อเพิ่มเติมได้ตามจำนวน การเชื่อมต่อค่าเริ่มต้นสามารถมีได้เพียงหนึ่งต่อเธรดหนึ่ง โปรดทราบว่าการเชื่อมต่อค่าเริ่มต้นทำงานได้อย่างถูกต้องหากผู้ใช้ใช้วัตถุ Thread สำหรับการเขียนโปรแกรมแบบหลายงาน หากผู้ใช้ใช้ ConnectionPool หรือใช้วัตถุ Task สำหรับการเขียนโปรแกรมแบบหลายงานโหมดนี้อาจทำให้แอปพลิเคชันทำงานผิดพลาด เพื่อหลีกเลี่ยงปัญหานี้ผู้ใช้ต้องทำการกำจัดการเชื่อมต่อค่าเริ่มต้นด้วยตนเอง (หากใช้) เมื่อสิ้นสุดการทำงานของโค้ด
  • ConnectionAsgmtType.UseMain ไคลเอนต์อีเมลใช้การเชื่อมต่อหลักสำหรับทุกการดำเนินการจากหลายเธรด การเชื่อมต่อหลักเป็นการเชื่อมต่อที่สร้างพร้อมกับไคลเอนต์อีเมล ผู้ใช้ไม่สามารถสร้างการเชื่อมต่อค่าเริ่มต้นได้ ผู้ใช้สามารถสร้างการเชื่อมต่อที่ไม่เชื่อมโยงกับเธรด (ไม่ใช่ค่าเริ่มต้น) ด้วย CreateConnection เมธอด หากผู้ใช้ต้องการใช้การเชื่อมต่ออื่น (ไม่ใช่หลักและไม่ใช่ค่าเริ่มต้น) ผู้ใช้ต้องส่งการเชื่อมต่อนั้นอย่างชัดเจนเป็นพารามิเตอร์ของเมธอดที่ต้องการใช้ 
  • ConnectionAsgmtType.UseDefault ไคลเอนต์อีเมลใช้การเชื่อมต่อค่าเริ่มต้นโดยอัตโนมัติสำหรับทุกการดำเนินการจากหลายเธรด การเชื่อมต่อหลักไม่ถูกใช้ในโหมดนี้ หากการเชื่อมต่อค่าเริ่มต้นยังไม่ได้สร้างสำหรับเธรดใด (การเรียกเมธอดไคลเอนต์อีเมลเป็นครั้งแรก) ไคลเอนต์อีเมลจะสร้างการเชื่อมต่อค่าเริ่มต้นโดยอัตโนมัติสำหรับเธรดนั้นก่อนการดำเนินการแรก ผู้ใช้ไม่สามารถสร้างการเชื่อมต่อค่าเริ่มต้นสำหรับเธรดด้วย CreateConnectionเมธอดเพราะพวกมันถูกสร้างอัตโนมัติ เมื่อการเชื่อมต่อค่าเริ่มต้นสำหรับเธรดถูกสร้างขึ้น จะถูกใช้โดยอัตโนมัติสำหรับทุกเมธอดของไคลเอนต์อีเมลที่เรียกใช้ในเธรดนั้น ผู้ใช้ยังสามารถสร้างการเชื่อมต่อที่ไม่เชื่อมโยงกับเธรด (ไม่ใช่การเชื่อมต่อค่าเริ่มต้น) ด้วย CreateConnectionเมธอด หากผู้ใช้ต้องการใช้การเชื่อมต่ออื่น (ไม่ใช่หลักและไม่ใช่ค่าเริ่มต้น) ผู้ใช้จะต้องส่งการเชื่อมต่อนั้นอย่างชัดเจนเป็นพารามิเตอร์ของเมธอดที่ต้องการใช้ ผู้ใช้สามารถสร้างการเชื่อมต่อได้เพิ่มเติมตามจำนวนที่ต้องการ การเชื่อมต่อค่าเริ่มต้นสามารถใช้ได้เพียงหนึ่งต่อหนึ่งเธรด โปรดทราบว่าการเชื่อมต่อค่าเริ่มต้นทำงานได้อย่างถูกต้องหากผู้ใช้ใช้วัตถุ Thread สำหรับการเขียนโปรแกรมแบบหลายงาน หากผู้ใช้ใช้ ConnectionPool หรือใช้วัตถุ Task สำหรับการเขียนโปรแกรมแบบหลายงานโหมดนี้อาจทำให้พฤติกรรมของแอปพลิเคชันผิดพลาด เพื่อหลีกเลี่ยงปัญหานี้ผู้ใช้ต้องทำการกำจัดการเชื่อมต่อค่าเริ่มต้นด้วยตนเองเมื่อสิ้นสุดการทำงานของโค้ด