تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
async and await keywords in vs2012
#1
[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]
الرد }}}
تم الشكر بواسطة: السندبااد , السندبااد , سعود
#2
موضوع ممتاز اخي الكريم هل سنعتبرها بديل ل للخيوط threed
ام لا
الرد }}}
تم الشكر بواسطة: السندبااد , سعود
#3
السلام عليكم اخي الكريم

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

بارك الله فيك شكرا على التعليق
الرد }}}
تم الشكر بواسطة: السندبااد , سعود
#4
عفوا
كنت اقصد في ردي هل تعمل عمل Thread يعني برنامجي سيواصل التنفيذ حتى لولم ينتهي من تنفيذ الدالة السابقة ام ماذا
الرد }}}
تم الشكر بواسطة: السندبااد , السندبااد , سعود
#5
السلام عليكم

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

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

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

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


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 2 ) ضيف كريم