Await و Async در #C
دسته : برنامه نویسی
نویسنده : فاطمه تابع
تاریخ : 1402/3/6
سطح : پیشرفته
پست های مرتبط
Await و Async در #C
برای برنامه نویسی نا همزمان یا (Asynchronous Programming) از Await و Async استفاده می کنیم که یکی از قابلیت های مهم زبان برنامه نویسی C# است و باعث بهبود عملکرد و سازگاری و خطایابی بهتر می شود.
برنامهنویسی غیرهمزمان یا ناهمگام (Asynchronous) این روزها به یکی از مهمترین جنبههای توسعه نرمافزار تبدیل شده است. وقتی که با عملیاتهایی زمانبر مانند درخواستهای شبکه، ورودی/خروجی(Input/Output) یا Queryهای پایگاه داده سر و کار داریم، اهمیت این مسئله بیشتر حس می شود. زبان C# ابزارهای قدرتمندی را برای سادهسازی برنامهنویسی ناهمگام (Asynchronous) فراهم میکند. دو عبارت کلیدی مهم در این زمینه کلمات await و async هستند. در این پست به بررسی دقیقawait وasync ، نحوه کار آن ها با هم و چگونگی استفاده موثر از آن ها در C# خواهیم پرداخت.
برنامهنویسی ناهمگام چیست؟
قبل از ورود به موضوع await وasync ، بیایید به طور خلاصه به برنامهنویسی ناهمگام (Asynchronous Programming) بپردازیم. در روش های سنتی، زمانی که یک متد یا تابع را اجرا میکنیم، آنها به صورت همزمان اجرا میشوند. این امر به این معنی است که اجرا تا پایان متد مسدود میشود. این موضوع میتواند به بروز مشکلاتی مانند متوقف شدن رابطکاربری (unresponsive user interfaces) و استفاده نامناسب از منابع منجر شود. برنامهنویسی ناهمگام (Asynchronous Programming) به عملیاتهایی گفته میشود که در طول آنها، برنامه میتواند ادامه یافته و سایر وظایف را اجرا کند. این روش اجرای موازی (parallel) را فراهم میکند و عملکرد و پاسخگویی کلی نرمافزارها را بهبود میبخشد.
معرفی async و await
عبارات کلیدی async و await در نسخه 5.0 زبان C# معرفی شدند تا برنامهنویسی ناهمگام را سادهتر کنند. عبارت کلیدی async برای اعلام یک متد به عنوان متد ناهمگام استفاده میشود. وقتی یک متد با async مشخص میشود، در هنگام انتظار برای جواب این متد، سایر وظایف قابل اجرا هستند.
عبارت کلیدی await برای انتظار پایان یک کار ناهمگام استفاده میشود. همچنین این مورد تنها در داخل یک متد async قابل استفاده است. وقتی عبارت کلیدی await مورد استفاده قرار میگیرد، متد به طور موقت متوقف میشود، تا کار ناهمگام به پایان برسد. این عبارت این اجازه را میدهد تا کد دیگری در این مدت اجرا شود به صورت موازی.
استفاده از async و await در C#
برای استفاده از async و await، این مراحل را دنبال کنید:
1. اعلام متد به عنوان async: با اضافه کردن کلمه کلیدی async در امضای متد (قبل از اسم تابع)، متد را به عنوان ناهمگام معرفی کنید. به عنوان مثال:
2. استفاده از await برای مکث و ادامه اجرا: در داخل متد async، از کلمه کلیدی await پس از یک عملیات ناهمزمان استفاده کنید. این عملیات میتواند یک تسک (task)، یک متد مبتنی بر تسک یا یک شیء باشد که یک متد GetAwaiter مناسب ارائه میدهد. به عنوان مثال:
در مثال بالا، متد GetStringAsync کلاس HttpClient با استفاده از await، به متد اجازه میدهد متوقف شده و پس از اتمام درخواستHTTP، ادامه یابد.
3. فراخوانی متدasync : هنگام فراخوانی یک متدasync ، با استفاده از کلمه کلیدی await منتظر پایان اجرای آن شوید. این مورد این اطمینان را میدهد که کد تا پایان متد ناهمگام ادامه پیدا نکند. به عنوان مثال:
در مثال بالا، متد Main منتظر پایان متد GetRemoteDataAsync است تا پس از آن، به پردازش داده برگردد.
مزایای async و await
عبارات کلیدی async و await چندین مزیت برای برنامهنویسی ناهمگام در C# دارند:
· بهبود خوانایی کد (Readability): کدهای ناهمگام نوشته شده با async و await معمولاً Readability بالاتری نسبت به رویکردهای مبتنی بر بازگشت تابع دارد.
· سادهسازی مدیریت خطا (Error Management): async و await به شما اجازه میدهند به سادگی با خطاها برخورد کنید. میتوانید از بلاک try-catch برای نگهداری و کنترل خطاهای پرتاب شده توسط عملیات استفاده کنید.
· بهبود عملکرد (Performance): با اجازه دادن به برنامه برای اجرای وظایف دیگر در طول انتظار، برنامهنویسی ناهمگام عملکرد و پاسخگویی برنامهها را بهبود میبخشد، به ویژه در صورتی که عملیات ورودی/خروجی (Input/Output) درگیر باشند.
· سازگاری با کدهای موجود (Consistency): async و await را میتوان با کدهای ناهمگام موجود، بدون نیاز به تغییرات زیاد استفاده کرد. این مورد این امکان را به برنامهنویس ها میدهد تا به طور تدریجی، عملیات های ناهمگام را در برنامههای خود پیاده سازی کند.
نتیجهگیری
برنامهنویسی ناهمگام یک تکنیک قدرتمند برای بهبود عملکرد و پاسخگویی برنامهها است. زبان C# با ارائه عبارات کلیدی async و await، برنامهنویسی و نوشتن کد های ناهمگام را آسانتر میسازد. با استفاده صحیح از async و await، میتوانید برنامههایی با عملکرد واکنشگرا و کارآمد ایجاد کنید.
پست های مرتبط