0Pricing
Dart Academy · บทเรียน

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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ลูปเหตุการณ์และไมโครทาสก์
  2. สร้างและรอค่า Future
  3. การจัดการข้อผิดพลาดในโค้ดอะซิงโครนัส
  4. Future.wait และงานแบบขนาน
← กลับไปที่ Dart Academy