في عالم البرمجة غير المتزامنة اليوم، نواجه العديد من التحديات، أحدها هو التعامل مع التأخير أو النوم بطريقة غير متزامنة. إنها ممارسة شائعة في البرمجة المتزامنة للتسبب في تأخير متعمد باستخدام Thread.Sleep()، ولكن في سياق غير متزامن، نستخدم Task.Delay(). أولاً، دعونا نتعمق ونفهم ماهية عوامل التشغيل غير المتزامنة والانتظار ومساحة المشكلة التي يقومون بحلها.
المشغلين غير المتزامنين والمنتظرين
تتيح لغة C# استخدام الكلمتين المفتاحيتين async و await، مما يسمح للمطورين بكتابة شيفرة غير متزامنة تشبه إلى حد كبير الشيفرة المتزامنة. يُخفف البرمجة غير المتزامنة من مشاكل الحظر أو الانتظار للعمليات طويلة الأمد مثل عمليات الإدخال/الإخراج، وطلبات الشبكة، أو العمليات الحسابية المعقدة، مما يُحسّن أداء النظام.
مهمة غير متزامنة عامة AsyncMethod()
{
انتظر طريقة أخرى ()؛
}
في الطريقة المذكورة أعلاه، عندما يتم تنفيذ التعليمات البرمجية والوصول إلى الكلمة الأساسية المنتظرة، فإنها تعود إلى المتصل وتنتقل إلى السطر التالي فقط عند اكتمال المهمة المنتظرة (AnotherMethod()).
النوم المتزامن مقابل التأخير غير المتزامن
دعونا نستكشف الفرق بين Thread.Sleep() وTask.Delay(). في التعليمات البرمجية المتزامنة، إذا أردنا تأخير تنفيذ إحدى الطرق أو إيقافه مؤقتًا، فإننا نستخدم Thread.Sleep(). ومع ذلك، في السيناريو غير المتزامن، لدينا Task.Delay() الذي يعمل مثل "السكون غير المتزامن".
SyncMethod () الفراغ العام
{
Thread.Sleep(1000);
}
مهمة غير متزامنة عامة AsyncMethod()
{
انتظر Task.Delay(1000);
}
في الطريقة المتزامنة، عند الضغط على تعليمات "السكون"، يتم حظر الخيط ووضعه في وضع السكون لفترة زمنية محددة مما قد يؤثر سلبًا على أداء النظام. في الطريقة غير المتزامنة، عند تنفيذ تعليمات "التأخير"، يتم إيقاف الطريقة مؤقتًا ولكن يتم تحرير الخيط مرة أخرى إلى تجمع سلاسل الرسائل، وبالتالي لا يوجد أي انسداد.
بناء طريقة نوم غير متزامنة
دعونا نجمع طريقة توضح مفهوم النوم غير المتزامن. ضع في اعتبارك أن لدينا بعض الأساليب الحسابية المكثفة التي نحتاجها للسخرية من السلوك.
مهمة عامة غير متزامنة ComputeIntensiveMethod()
{
for (int i = 0; i < 5; i++) { wait Task.Delay(2000); Console.WriteLine("التنفيذ بعد التأخير"); } } [/code] في الطريقة المذكورة أعلاه، ستقدم Task.Delay تأخيرًا غير متزامن لمدة ثانيتين بعد كل تنفيذ لبيان الطباعة، وبالتالي محاكاة السكون غير المتزامن. تعد البرمجة غير المتزامنة أمرًا حيويًا لبناء تطبيقات سريعة الاستجابة وفعالة. باستخدام إمكانيات C# المتقدمة مثل async/await وTask.Delay()، يمكنك الاستفادة من فائدة برمجة النمط غير المتزامن إلى أقصى إمكاناتها. تذكر أن طريقة Task.Delay هي أكثر كفاءة بكثير مقارنة بـ Thread.Sleep في عالم البرمجة غير المتزامنة، لأنها لا تحظر الخيط أثناء التسبب في التأخير. يمكن أن يؤدي استخدام هذه الحقوق إلى تعزيز أداء تطبيقك بشكل كبير.