0Pricing
Swift Academy · درس

async let وTask والإلغاء

شغّل العمل بالتوازي باستخدام async let ، وأنشئ Task s مستقلة، وتعامل مع cancellation بطريقة تعاونية.

async let وTask والإلغاء درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 2 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 3 دروس في المجموع.

ما ستتعلّمه

ستتعلّم ما يلي:

  • بدء الأعمال الشقيقة باستخدام async let
  • تشغيل وحدات مستقلة باستخدام Task { }
  • الاستجابة إلى الإلغاء باستخدام التحقق التعاوني

أساسيات async let

يبدأ async let المهام الفرعية بالتوازي داخل النطاق نفسه؛ ويجب استخدام await قبل مغادرة النطاق.

func loadA() async -> Int { try? await Task.sleep(nanoseconds: 200_000_000); return 1 }
func loadB() async -> Int { try? await Task.sleep(nanoseconds: 200_000_000); return 2 }

Task {
    async let a = loadA()
    async let b = loadB()
    // Both start immediately; awaiting joins them
    let sum = await (a + b)
    print("sum =", sum) // 3
}

مهمة Task مستقلة

استخدم Task {} لتشغيل مهمة مستقلة، ثم استخدم await t.value لاحقًا للحصول على نتيجتها.

// Create an independent task (not tied to current scope)
func fetchMessage() async -> String {
    try? await Task.sleep(nanoseconds: 150_000_000)
    return "hello"
}

let t = Task { await fetchMessage() }
Task {
    print("from Task:", await t.value)  // waits for the independent task's result
}

أساسيات الإلغاء

الإلغاء تعاوني. تحقّق باستخدام Task.checkCancellation()، الذي يرمي خطأ، أو اقرأ Task.isCancelled واخرج مبكرًا.

// A long-running job that checks for cancellation
enum WorkError: Error { case cancelled }

func longJob() async throws -> Int {
    var total = 0
    for i in 1...10 {
        try Task.checkCancellation()        // throws CancellationError if cancelled
        try? await Task.sleep(nanoseconds: 50_000_000)
        total += i
    }
    return total
}

let job = Task { try await longJob() }
Task {
    // Cancel after a short delay
    try? await Task.sleep(nanoseconds: 120_000_000)
    job.cancel()
    do {
        _ = try await job.value
    } catch {
        print("job cancelled")              // expected
    }
}

إلغاء المهمة الأصلية للمهام الفرعية

عند إلغاء المهمة الأصلية، تلاحظ المهام الفرعية ذلك، وينبغي أن تخرج سريعًا بعد إجراء التحقق.

// Propagate cancellation from parent to children using async let
func part(_ id: Int) async throws -> String {
    try Task.checkCancellation()
    try? await Task.sleep(nanoseconds: 80_000_000)
    return "P\(id)"
}

Task {
    do {
        async let p1 = part(1)
        async let p2 = part(2)
        // Cancel the whole operation before awaiting
        Task.currentTask?.cancel()   // cancel self -> children see cancellation
        let out = try await [p1, p2].joined(separator: ",")
        print(out)
    } catch {
        print("parent cancelled; children stopped")
    }
}

إرشادات

نصائح:

  • استخدم async let للمهام الشقيقة، وانتظرها دائمًا في النطاق نفسه.
  • ألغِ المهمة باستخدام task.cancel()، واستدعِ داخل العمل Task.checkCancellation().
  • فضّل الدوال async الصغيرة، إذ يسهل إلغاؤها واختبارها.

سلوك الإلغاء التعاوني

تحقق سريع: كيف ينبغي للكود async طويل التشغيل أن يستجيب للإلغاء؟

خلاصة

الخلاصة: ابدأ المهام الشقيقة باستخدام async let، وشغّل الأعمال المستقلة داخل Task {}، ونفّذ الإلغاء التعاوني بالتحقق والخروج سريعًا.

الأسئلة الشائعة

هل درس «async let وTask والإلغاء» مجاني؟

نعم — نص درس «async let وTask والإلغاء» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 3 دروس في المجموع.

ماذا ستتعلم في «async let وTask والإلغاء»؟

شغّل العمل بالتوازي باستخدام async let ، وأنشئ Task s مستقلة، وتعامل مع cancellation بطريقة تعاونية. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟

لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 3.

كم من الوقت يستغرق درس «async let وTask والإلغاء»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟

نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. التزامن المنظّم والدوال غير المتزامنة
  2. async let وTask والإلغاء
  3. try await وانتشار الأخطاء
← العودة إلى Swift Academy