Future.wait และงานแบบขนาน
เรียกใช้ Future หลายรายการพร้อมกัน
Future.wait และงานแบบขนาน เป็นบทเรียน Dart Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Dart Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Dart Academy มีบทเรียนทั้งหมด 4 บทเรียน
การรอทีละรายการช้า
การรอ Future ตามลำดับทำให้แต่ละรายการต้องรอรายการก่อนหน้า การเรียกใช้สามครั้ง ครั้งละหนึ่งวินาที จึงใช้เวลารวมสามวินาที
เริ่มทำงานพร้อมกัน
เริ่มการเรียกแบบ async ที่ไม่ขึ้นต่อกันก่อน แล้วจึงรอผลลัพธ์ การเรียกเหล่านี้ทำงานพร้อมกัน เวลารวมจึงขึ้นอยู่กับรายการที่ช้าที่สุด ไม่ใช่ผลรวมของเวลาทั้งหมด
พบกับ Future.wait
Future.wait รับลิสต์ของ Future และคืนค่าเป็น Future เดียวที่จะเสร็จสิ้นเมื่อ Future ทั้งหมดทำงานเสร็จ
final results = await Future.wait([a(), b(), c()]);ผลลัพธ์ยังคงเรียงลำดับเดิม
Future.wait จะให้ลิสต์ผลลัพธ์ตามลำดับเดียวกับ Future ที่ป้อนเข้าไป ไม่ว่ารายการใดจะเสร็จก่อน
final list = await Future.wait([one(), two()]);
print(list[0]); // result of one()ประหยัดเวลาได้จริง
Future สามรายการที่ทำงานขนานกันและใช้เวลารายการละหนึ่งวินาทีจะเสร็จพร้อมกันในเวลาประมาณหนึ่งวินาที เนื่องจาก Future.wait ทำให้ช่วงเวลาที่รอซ้อนทับกัน
หากรายการหนึ่งล้มเหลว
โดยค่าเริ่มต้น หาก Future ใดเกิดข้อผิดพลาด Future.wait จะเสร็จสิ้นพร้อมข้อผิดพลาดนั้นทันที แม้รายการอื่นจะยังทำงานอยู่
ทำงานต่อด้วย eagerError
ส่งค่า eagerError: false แล้ว Future.wait จะยังรอ Future ทุกตัวก่อนรายงานข้อผิดพลาดแรกที่พบ
await Future.wait(tasks, eagerError: false);แข่งกันด้วย Future.any
ต้องการเพียงผลลัพธ์ที่เร็วที่สุดใช่ไหม Future.any จะเสร็จสิ้นทันทีที่ Future แรกในลิสต์ทำงานสำเร็จ
final fastest = await Future.any([mirrorA(), mirrorB()]);การสร้างลิสต์
รูปแบบที่ใช้กันทั่วไปคือใช้ map กับอินพุตเพื่อสร้างลิสต์ของ Future แล้วส่งลิสต์นั้นให้ Future.wait ได้โดยตรง
await Future.wait(ids.map(fetchUser));ทำงานพร้อมกัน ไม่ใช่เธรดแบบขนาน
นี่คือการทำงานพร้อมกันภายใน isolate เดียว ลูปเหตุการณ์จะสลับจัดการช่วงเวลาที่รอ หากเป็นงานที่ใช้ CPU หนัก คุณควรใช้ isolate
ควรใช้แต่ละแบบเมื่อใด
ใช้ Future.wait เมื่อต้องการผลลัพธ์ทั้งหมด และใช้ Future.any เมื่อต้องการเพียงผลลัพธ์แรกที่มาถึง ⚖️
ตรวจสอบความเข้าใจ
ตรวจสอบความเข้าใจอย่างรวดเร็วเกี่ยวกับการเรียกใช้ Future พร้อมกัน
ทบทวน: Future แบบขนาน
คุณได้เรียนรู้การซ้อนเวลารอของงานแบบ async ด้วย Future.wait เพื่อรับผลลัพธ์ทั้งหมด การใช้ Future.any เพื่อรับผลลัพธ์ที่เร็วที่สุด และพฤติกรรมของข้อผิดพลาด 🏁
คำถามที่พบบ่อย
บทเรียน “Future.wait และงานแบบขนาน” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “Future.wait และงานแบบขนาน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Dart Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Dart Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “Future.wait และงานแบบขนาน”
เรียกใช้ Future หลายรายการพร้อมกัน คุณปฏิบัติ Dart Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Dart Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Dart Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “Future.wait และงานแบบขนาน” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Dart Academy นี้ได้ไหม
ได้ บทเรียน Dart Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ลูปเหตุการณ์และไมโครทาสก์
- สร้างและรอค่า Future
- การจัดการข้อผิดพลาดในโค้ดอะซิงโครนัส
- Future.wait และงานแบบขนาน