--- title: Async / Await localeTitle: غير متزامن / في انتظار --- # Async / Await Keywords توفر الكلمات الرئيسية غير `async` / `await` في C # طرقًا مريحة لإدارة التطبيقات ذات الموارد المكثفة ، وهي أكثر شيوعًا في اللغات الأمامية مثل مكتبات جافا سكريبت. الأساليب التي ترجع يمكن أن تتوج أنواع `Task` بالكلمة الرئيسية `async` ، وعند استدعاء هذه الطرق في معالج واجهة المستخدم أو سير العمل ، يمكننا استخدام `await` على الطرق لإخبار C # بإرجاع عنصر التحكم مرة أخرى إلى المتصل حتى انتهت مهمة الخلفية. ومن خلال التحكم في المكالمات ذات الموارد المكثفة ، يمكننا السماح لواجهة المستخدم بأن تكون أكثر استجابة وأن تجعل الخدمة أكثر مرونة. جوهر `async` `await` هي فئة `Task` . عند استخدامه مع الكلمة الرئيسية `async` كنوع الإرجاع للطريقة ، فإننا نوضح أن الطريقة قد وعدت بإرجاع كائن من النوع `T` (للطرق التي لن تعيد أي قيمة ، استخدم `Task` كنوع الإرجاع بدلاً من ذلك) . `Task` هي موضوع متطور خاص بها ، لمزيد من المعلومات ، يرجى الرجوع إلى الوثائق الرسمية: [فئة المهام](https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.task?view=netframework-4.7.1) . بمجرد مواجهة أساليب `async` ، سيتم وضع العمل في قائمة الانتظار في تجمع مؤشر ترابط للتنفيذ ، بينما يستمر المتصل في تنفيذه دون انتظار قيم الإرجاع من أساليب `async` . ومع ذلك ، في معظم الحالات ، تعتمد واجهة المستخدم والخدمة على القيم التي يتم إرجاعها من أساليب `async` : على سبيل المثال ، عندما نقوم بالاستعلام عن قاعدة بيانات محلية باستخدام أساليب `async` ، فإننا نرغب في النهاية في معرفة ما هي نتائج الاستعلام والتصرف عليها ، متزامن. هذا هو المكان الذي `await` يجوز استخدام الكلمة: في حالة استخدام `await` الكلمة عند استدعاء أحد `async` طريقة، فإن المتصل وقفة التنفيذ حتى يتم إرجاع نتيجة لذلك من `async` الطريقة، ويعني في حين، وسوف تستمر في طريقة الأم التنفيذ دون انتظار المتصل للانتهاء. وقال مع ذلك، أي الأساليب التي تستخدم `await` الكلمة يجب أن تكون `async` وظيفة أنفسهم - وهذا هو المتبع من قبل C # مترجم وكذلك، إذا باستخدام Visual Studio إلى حسابك على إكبس C # رمز، فإن IDE يحذرك إذا كان الأسلوب ينتهك `async-await` العقد. لمعرفة المزيد حول استخدام نموذج الوعد للتعامل مع عدم التزامن ، راجع صفحة ويكيبيديا: [تحقيق](https://en.wikipedia.org/wiki/Futures_and_promises) التزامن من [خلال الوعود](https://en.wikipedia.org/wiki/Futures_and_promises) ## أمثلة 1. تقديم نموذج للخادم `private readonly string url = 'http://localhost:3000/api/submit'; private readonly HttpContent formContent = new HttypContent(); // Update the formContent object while filling up the form. SubmitButton.Clicked += async (object, event) => { // When PostAsync is hit, the button control will release the UI, while the // http post method is still waiting on server response. HttpClient httpClient = new HttpClient(); var response = await httpClient.PostAsync(url, formContent); Console.WriteLine(response.StatusCode); } ` 2. المزالج "المزالج" `public async Task CalcDamage(Player player) { // CPU-intense method, calculate afflicted damage done to the // Boss based on the damage types, Boss stats (from static data), // player stats, etc. // ... } public static async Task CalcTotalDamage(IEnumerable group) { var totalDamage = 0; foreach (Player player in group) { // each of the async methods are queued in the thread-pool and move on. totalDamage += CalcDamage(player); } // total damage done must be calculated from all players in the group // before we return the result. return await Task.WhenAll(totalDamage); } ` ## الغش ورقة * في انتظار: استرداد النتيجة من مكالمة متزامن في الخلفية. * انتظر Task.WhenAny: متابعة إذا اكتمال أي من المهام في قائمة الانتظار. * انتظر Task.WhenAll: متابعة فقط إذا اكتمال كافة المهام في قائمة الانتظار. * في انتظار المهمة.تحديد: لفترة إضافية من الوقت قبل التنفيذ. ## قراءة متعمقة: * [برمجة غير متزامنة](https://docs.microsoft.com/en-us/dotnet/csharp/async) * [المتزامن في العمق](https://docs.microsoft.com/en-us/dotnet/standard/async-in-depth) * [3 نصائح أساسية ل asnyc](https://channel9.msdn.com/Series/Three-Essential-Tips-for-Async)