#️⃣ شرح C#

البرمجة غير المتزامنة (async/await)

لماذا async؟

العمليات الطويلة (شبكة، ملفات، قواعد بيانات) تجمّد البرنامج إن نُفِّذت تزامنيًّا. async/await تحلّ ذلك.

Task

Task يمثّل عملية قد تنتهي لاحقًا:

async Task<string> FetchDataAsync()
{
    await Task.Delay(2000);   // محاكاة انتظار
    return "البيانات جاهزة";
}

await

ينتظر اكتمال المهمّة دون حجب الخيط الرئيسي:

async Task RunAsync()
{
    Console.WriteLine("بدء التحميل...");
    string data = await FetchDataAsync();
    Console.WriteLine(data);
}

Main غير متزامنة

static async Task Main()
{
    await RunAsync();
}

تشغيل مهامّ متوازية

Task<string> t1 = FetchDataAsync();
Task<string> t2 = FetchDataAsync();
string[] results = await Task.WhenAll(t1, t2);   // معًا

قواعد ذهبية

  • الدالة async يجب أن تعيد Task أو Task<T> (أو void للأحداث فقط).
  • أضف لاحقة Async لأسماء الدوال اصطلاحًا.
  • لا تستخدم .Result أو .Wait() (قد تسبّب تجمّدًا) — استخدم await.

🎯 التالي: خلاصة مسار C#.