آموزش Async و Await در سی شارپ

لرن سایت,آموزش برنامه نویسی سی شارپ,آموزش طراحی سایت,آموزش برنامه نویسی اندروید,آموزش SQL c# android php jquery,قالب سایت

شما اینجا هستید : صفحه اصلی

با عضویت در کانال تلگرامی لرن سایت ، اولین فردی باشید که از تخفیفات و مطالب جدید خبردار می شوید !

آموزش Async و Await در سی شارپ

async و wait سی شارپ

امروزه برنامه نویسی ناهمگام (Asynchronous) نزد دولوپر ها بسیارمحبوب شده است.

وقتی ما با Ui سروکار داریم و یک متد که زمان اجرای آن طولانیست ( مثل خواندن یک فایل بزرگ و ذخیره آن در پایگاه داده) را در رویداد کلیکِ یک دکمه میگذاریم زمانی که روی آن دکمه کلیک شود رابط کاربری اپلیکیشن قفل شده و به اصطلاح هنگ میکند ، زیرا رابط کاربری و بقیه متد ها در برنامه نویسی همگام (Synchronous) در یک نخ (Thread) از سی پی یو اجرا میشوند پس رابط کاربری تا زمانی که فعالیت متد خاتمه نیابد پاسخی به کاربر نمیدهد.

برنامه نویسی ناهمگام در این شرایط بسیار کار آمد است ، زیرا در این روش رابط کاربری و متد ها به هم متکی نبوده و متد ها به صورت جداگانه اجرا میشوند.

async و await دو برچسب هستند که مشخص میکنند در کدام بخش کد پاسخ دهی باید بعد از اتمام کار از سر گرفته شود.

خب ، وقت این است که با چند مثال کاربردی کاربرد برنامه نویسی ناهمگام را درک کنیم :

مثال های ساده برای درک Async و Await در سی شارپ

مثال 1 :

در این مثال ما دو متد داریم که به هم متکی نیستند:

کد:

در کد بالا متد یک و متد دو به هم متکی نیستند و ما از متد Main آن هارا صدا میزنیم و میبینیم که متد ها کاری به یکدیگر ندارند.

خروجی:

خروجی

خب ، حالا به سراغ مثال بعد برویم ، فرض کنید ما یک متد سه هم داریم که متد یک متکی است.

مثال 2 :

در این مثال متد 1 طول یک عدد صحیح را  به ما بر میگرداند ، که ما به صورت ورودی آن را به عنوان طول به متد 2 میدهیم ( پس متد 2 نیاز به یک ورودی دارد که متد 1 آن را به ما بر میگرداند)

اینجا ما باید از کلمه await قبل از دادن طول عدد به عنوان ورودی استفاده کنیم که لازمه استفاده از await ، استفاده از کلمه async در متد صدا زننده است.

ما نمیتوانیم کلمه await را بدون async استفاده کنیم ، و اگر ما در متد Main کلمه Async را استفاده کنیم به این ارور میخوریم:

پس ما یک متد به نام callMethod تعریف میکنیم و در آن متد های خود را به ترتیب صدا میزنیم:

کد:

 

مطلب پیشنهادی :  آموزش ایجاد و کاربرد و استفاده از dll سی شارپ

در کد بالا ، متد 3 یک ورودی میخواهد که وابسته به متد یک هست ، اینجاست که کلمه await نقش مهمی را برای صبر کردن برای اتمام و متد 1 و دادن آن به عنوان ورودی به متد 3 ایفا میکند.

خروجی:

خروجی

یک مثال واقعی

async و await از دات نت فریمورک 4.5 به بعد پشتیبانی میشوند که ما میتوانیم در پروژه های خود از آن ها استفاده کنیم.

برخی از Api  های پیشفرض در سی شارپ مانند : اچ تی تی پی کلاینت ، استریم ها و ….  Async هستند که با کلمه Async بعد از نام متد میتوان آن هارا تشخیص داد .

دراین مثال ما قصد داریم که کل کاراکتر های یک فایل متنی بزرگ را بخوانیم و تعداد کل کاراکتر های موجود در آن فایل را بدست آوریم.

 

کد:

 

در مثال بالا ما از متد ReadFile برای خواندن طول کاراکتر های فایل خود استفاده میکنیم.

در فایل sampleText.txt ما کارکتر های زیادی وجود دارد و خواندن تمام آن ها زمان زیادی میبرد.

 

در اینجا ، ما از async استفاده میکنیم ، به همین دلیل برنامه منتظر متد برای دریافت خروجی  نمانده و بقیه خط های کد را اجرا میکند ، اما در کد زیر ما از await استفاده کردیم تا برنامه منتظر خروجی بماند:

بعد از آن بقیه خظوط به صورت پیوسته اجرا میشوند

خروجی

این نکات کلیدی را همیشه باید به یاد داشته باشیم:

اگر ما از کلمه await در متد خود استفاده نکنیم برنامه ما به صورت معمولی اجرا شده و کمپایلر آن را به عنوان همگام در نظر میگیرد ( کمپایلر یک اخطار در این زمینه به ما میدهد اما هیچ اروری به ما داده نمیشود)

بدین ترتیب ما میتوانیم از دو کلمه کلیدی async و await در سی شارپ به صورت ناهمگام کد بزنیم .

امیدوارم از این مطلب استفاده کافی را برده باشید ، حالا نوبت شماست ، نظرات و سوالات خود را در رابطه با async و await در بخش نظرات همین مطلب مطرح کنید تا توسط کارشناسان ما پاسخ خود را دریافت کنید.

 

 

 

 

 

اگه مطلب خوشتون اومد پس لطفا به اشتراک بذارین تا بقیه هم خوششون بیاد :)

نظرات

مشترک شدن
اطلاع رسانی از :
guest
7 Comments
Inline Feedbacks
View all comments
roohollah
roohollah
9 ماه گذشته

سلام ببخشید من یه برنامه نوشتم که 100 تا تصویر 3مگ رو لود میکنم با حلقه توسط متد1. بعد ارجاع میدم به متد2 ادیت میکنم روی تصاویر بعد با فراخوانی متد3 ذخیره میکنم تصاویر رو وقتی این برنامه اجرا میشه کاملا انتظارمو براورده میکنه ولی قبل انجام پروسه یه چند دقیقه ای هنگ میکنه سیستم یعنی cursor حرکت میکنه ولی تمام فرم از فعال بودن میفته(در توضیح مدل هنگ کردن :رویداد mousehover برای هیچکدوم از کنترل ها فعال نمیشه تا چند دقیقه).
حالا راه حل چیه
از مدل چند نخی استفاده کنم یا await,async یا هرسه؟

roohollah
roohollah
Reply to  roohollah
9 ماه گذشته

پس از کلمات کلیدی await ,async
لزومی نیست؟

شریف پور
Reply to  roohollah
9 ماه گذشته

خیر در روش ذکر شده نیاز نیست.

احسان
احسان
1 سال گذشته

عالی بود، خدا قوت استفاده کردم

VAHID
VAHID
1 سال گذشته

ممنون عالی بود

بهنام
بهنام
1 سال گذشته

برای شروع به درک این مطالب ، عالی بود