0Pricing
C# Academy · درس

Task/ValueTask وآلة الحالة غير المتزامنة (مفاهيم)

افهم نتائج Task وفكرة آلة الحالة غير المتزامنة. اكتب أساليب غير متزامنة صغيرة، وركّب عمليات await، وشاهد مصدرًا يدويًا لإكمال Task.

Task/ValueTask وآلة الحالة غير المتزامنة (مفاهيم) درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 1 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 3 دروس في المجموع.

النموذج الذهني

الهدف: بناء فهم حدسي للبرمجة غير المتزامنة.

  • يمثّل Task عملًا جاريًا ونتيجة مستقبلية
  • يوقف await التنفيذ مؤقتًا ثم يستأنفه لاحقًا
  • ينشئ المترجم آلة حالات
  • ValueTask: تحسين أحدث، نعرض فكرته فقط هنا

أساسيات الطريقة غير المتزامنة

تعيد طريقة async القيمة Task<T> فورًا؛ ثم تكتمل لاحقًا بالقيمة عند انتهاء العمل الذي تم انتظاره.

using System;
using System.Threading;
using System.Threading.Tasks;

public class Program
{
  // Tiny async method: returns Task<int>
  static async Task<int> GetAnswerAsync()
  {
    // Offload simple work to a thread-pool task (demo only)
    int value = await Task.Run(() =>
    {
      Thread.Sleep(200); // simulate work
      return 42;
    });
    return value; // completes Task<int>
  }

  public static void Main(string[] args)
  {
    // In C# 6, Main cannot be async; block just for demo (console apps are safe here)
    int result = GetAnswerAsync().Result;
    Console.WriteLine("Answer = " + result);
  }
}

تركيب عمليات الانتظار

يتيح لك await كتابة خطوات غير متزامنة متسلسلة بأسلوب واضح من الأعلى إلى الأسفل.

using System;
using System.Threading;
using System.Threading.Tasks;

public class Program
{
  static async Task<int> Step1Async()
  {
    // pretend I/O
    await Task.Delay(100);
    return 10;
  }

  static async Task<int> Step2Async(int x)
  {
    await Task.Delay(100);
    return x * 3; // simple transform
  }

  static async Task<int> PipelineAsync()
  {
    int a = await Step1Async();   // await first
    int b = await Step2Async(a);  // then await second
    return a + b;                 // total 10 + 30 = 40
  }

  public static void Main(string[] args)
  {
    int total = PipelineAsync().Result; // block in demo
    Console.WriteLine("Total = " + total);
  }
}

فكرة آلة الحالات

المفهوم: يحوّل المترجم الطريقة غير المتزامنة إلى آلة حالات.

  • تُخزّن المتغيرات المحلية كحقول
  • ينتج عن كل await حالة جديدة
  • عند اكتمال Task الذي يتم انتظاره، تستأنف الطريقةَ آليةُ متابعة
  • تُلتقط الاستثناءات وتُسجّل في Task

عرض توضيحي لـ TaskCompletionSource

يتيح لك TaskCompletionSource إنشاء Task والإشارة إلى اكتماله لاحقًا؛ ويستهلكه await مثل أي Task آخر.

using System;
using System.Threading;
using System.Threading.Tasks;

public class Program
{
  // Emulate an async source that completes later
  static Task<string> MakeTaskManually()
  {
    var tcs = new TaskCompletionSource<string>();
    // Complete on a worker after a short delay
    ThreadPool.QueueUserWorkItem(_ =>
    {
      Thread.Sleep(150);
      tcs.SetResult("done");
    });
    return tcs.Task;
  }

  static async Task<string> UseAsyncSource()
  {
    string s = await MakeTaskManually(); // await a Task you created
    return s.ToUpperInvariant();
  }

  public static void Main(string[] args)
  {
    Console.WriteLine(UseAsyncSource().Result);
  }
}

مفهوم ValueTask

ValueTask (مفهوم): نوع إرجاع أحدث يقلل تخصيصات الذاكرة للنتائج التي تكتمل بصورة متزامنة غالبًا.

  • مفيد عندما تكون النتائج متاحة مسبقًا معظم الوقت
  • له قواعد لتجنب تخصيصات الذاكرة الإضافية
  • غير متاح في C# 6؛ استخدم Task هنا، فالأفكار نفسها تنطبق

آلة الحالات غير المتزامنة

تحقق سريع: ماذا ينشئ مترجم C# لطريقة async تستخدم await؟

مراجعة

مراجعة: يمثّل Task العمل؛ ويوقف await التنفيذ ثم يستأنفه؛ وينشئ المترجم آلة حالات. أما ValueTask فهو مفهوم لتحسين الأداء، لذا استخدم Task في C# 6.

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

هل درس «Task/ValueTask وآلة الحالة غير المتزامنة (مفاهيم)» مجاني؟

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

ماذا ستتعلم في «Task/ValueTask وآلة الحالة غير المتزامنة (مفاهيم)»؟

افهم نتائج Task وفكرة آلة الحالة غير المتزامنة. اكتب أساليب غير متزامنة صغيرة، وركّب عمليات await، وشاهد مصدرًا يدويًا لإكمال Task. تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

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

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

كم من الوقت يستغرق درس «Task/ValueTask وآلة الحالة غير المتزامنة (مفاهيم)»؟

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

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

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

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

  1. Task/ValueTask وآلة الحالة غير المتزامنة (مفاهيم)
  2. مشكلات عدم التزامن: التزامن فوق عدم التزامن والتعطّل المتبادل
  3. ConfigureAwait وتدفّق الاستثناءات
← العودة إلى C# Academy