การปรับโครงสร้าง 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 สำหรับการเขียนโปรแกรมแบบหลายงานโหมดนี้อาจทำให้พฤติกรรมของแอปพลิเคชันผิดพลาด เพื่อหลีกเลี่ยงปัญหานี้ผู้ใช้ต้องทำการกำจัดการเชื่อมต่อค่าเริ่มต้นด้วยตนเองเมื่อสิ้นสุดการทำงานของโค้ด