منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : async and await keywords in vs2012
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
[COLOR="#FF0000"]بسم الله الرحمن الرحيم
((رب اشرح لي صدري ويسر لي امري واحلل عقدة من لساني يفقهوا قولي))
صدق الله العلي العظيم

[/COLOR]


السلام عليكم ايها الاحبة اعضاء وزوار المنتدى الكرام ان شاءالله تكونوا في تمام الصحة والعافيةSmile

[COLOR="#800080"]الكثير منا ربما يعرفون عن البرمجة الغير المتزامنة Asynchronous operations والتعامل معها لما لها من فوائد كثيرة منها منع جمود الmain thread اثناء اداء عملية ما قد تستغرق وقتا طويلا مثلا قراءة محتويات ملف كبير الحجم والتي سيؤدي الى جمود البرنامج لحين انتهاء عملية القراءة ,وهنالك الكثير من الدوال التي تتعامل مع البرمجة الغير المتزامنة وقد اضيفت الى هذه الدوال في الاصدار الجديد للفيجوال ستوديو VS2012 كلمتان مفتاحيتان لغرض سهولة التعامل مع البرمجة الغير المتزامنة وهما: await and async والتي نحن بصدد تعريف هاتان الكلمتان لاحقا مع مثال يبين كيفية استخدام هاتان الكلمتان.

الكلمة المفتاحية async : هذه الكلمة تستخدم للدلالة على أن الدالة او الاجراء تحتوي على عملية غير متزامنة ,أو وظيفتها اجراء عملية غير متزامنة.

الكلمة المفتاحية await : وهذه الكلمة تطبق على ناتج الدالة الغير المتزامنة async method .[/COLOR]


مثال من msdn لنسخ محتويات ملف الى ملف آخر:

PHP كود :
private async void Button_Click(object senderRoutedEventArgs e)
{
    
string UserDirectory = @"c:\Users\exampleuser\";

    using (StreamReader SourceReader = File.OpenText(UserDirectory + "
BigFile.txt"))
    {
        using (StreamWriter DestinationWriter = File.CreateText(UserDirectory + "
CopiedFile.txt"))
        {
            await CopyFilesAsync(SourceReader, DestinationWriter);
        }
    }
}

public async Task CopyFilesAsync(StreamReader Source, StreamWriter Destination) 

    char[] buffer = new char[0x1000]; 
    int numRead; 
    while ((numRead = await Source.ReadAsync(buffer, 0, buffer.Length)) != 0) 
    {
        await Destination.WriteAsync(buffer, 0, numRead);
    } 


[COLOR="#4B0082"]كما تلاحظون الكلمة async موجودة امام تعريف الاجراءات وذلك لان هذه الاجراءات فيها عمليات غير متزامنة ,والكلمة await توضع قبل دالة العملة الغير المتزامنة.

ملاحظة: هاتان الكلمتان تكتبان بلغة الVB.Net هكذا: Async ,Await .

ارجوا ان اكون قد وفقت لنقل المعلومة لكم ان شاءالله والتوفيق من الله تعالىSmile[/COLOR]
موضوع ممتاز اخي الكريم هل سنعتبرها بديل ل للخيوط threed
ام لا
السلام عليكم اخي الكريم

كلا اخي العزيز ليس بديلا للThread وانما هي اضيفت لغرض تسهيل التعامل مع البرمجة الغير متزامنة في الاصدار الجديد الVS وليس له علاقة بالThread

بارك الله فيك شكرا على التعليق
عفوا
كنت اقصد في ردي هل تعمل عمل Thread يعني برنامجي سيواصل التنفيذ حتى لولم ينتهي من تنفيذ الدالة السابقة ام ماذا
السلام عليكم

اخي الكريم الThread عبارة عن قابلية البرنامج من تنفيذ عدة عمليات في نفس الوقت ,كمثال: عند كتابتك في برنامج الWord هنالك عملية التدقيق وعملية الخزن التلقائي فهاتان العمليتان تجريان في نفس الوقت اثناء الكتابة , وهذا ما يسمى بالبرمجة المتوازية ,هذا هو عمل الThread.

اما العملية الغير المتزامنة فهي تمنع البرنامج من الدخول في جمود اثناء تنفيذ عملية ما وهي تشبه وظيفية الThread لكن ليس وظيفتها البرمجة المتوازية فهذه عمل الThread.

ارجو ان تكون وضحت لك الصورةSmile

بالتوفيق ان شاءالله
كيف ندمج بالتعامل مع الاثنتين او الميزتين؟
الـthread  و taskasynce
لان استخدام الـtask asynce وحدها يسبب جمود الفورم حتى تتم العملية.
كمثال
PHP كود :
       Await sh()
 
       Form2.Show() 
يتجمد الفورم حتى انتهاء الاجراء sh