20 ساعت قبل

Async/Await؛ اجرای هوشمند عملیات زمان‌بر

 Async/Await چیست و چرا یادگیری آن برای برنامهنویسان ضروری است؟

فرض کنید وارد یک فروشگاه اینترنتی شدهاید و روی دکمه «نمایش محصولات» کلیک میکنید. اگر برنامه مجبور باشد تا دریافت اطلاعات از سرور صبر کند، ممکن است کل صفحه برای چند ثانیه قفل شود؛ دکمه ها کار نکنند، اسکرول متوقف شود و کاربر احساس کند برنامه از کار افتاده است.
امروزه یکی از مهم ترین دلایلی که نرم افزارها روان و حرفه ای به نظر میرسند، استفاده از برنامه نویسی ناهمزمان (Asynchronous Programming) است و Async/Await یکی از ساده ترین و پرکاربردترین روش های پیاده سازی آن محسوب میشود.
 

اما Async/Await دقیقاً چیست و چه مشکلی را حل میکند؟

 Async/Await چیست؟

در بسیاری از برنامه ها انجام بعضی عملیات ها زمانبر است، مانند:
  •  دریافت اطلاعات از اینترنت (API)
  •  ارتباط با پایگاه داده
  •  خواندن یا ذخیره فایل
  •  دانلود تصاویر یا ویدئو
  •  ارسال درخواست به سرور
اگر برنامه برای پایان هر یک از این عملیات ها منتظر بماند، بخشی از برنامه بلاک میشود و ممکن است کاربر احساس کند نرم افزار کند یا غیر پاسخگو است.
Async/Await این مشکل را حل میکند. به زبان ساده، برنامه میتواند در زمان انتظار برای پایان یک عملیات، به انجام کارهای دیگر ادامه دهد و پس از آماده شدن نتیجه، اجرای همان بخش را از سر بگیرد.
 
 
 یک مثال ساده
فرض کنید در یک کافی شاپ قهوه سفارش میدهید.
  • حالت همزمان (Synchronous):
سفارش را ثبت میکنید و تا آماده شدن قهوه باید کنار صندوق منتظر بمانید.
 
  • حالت ناهمزمان (Asynchronous):
سفارش را ثبت میکنید، شماره سفارش میگیرید و تا آماده شدن قهوه میتوانید کتاب بخوانید یا با دوستانتان صحبت کنید. وقتی قهوه آماده شد، آن را تحویل می گیرید.
Async/Await دقیقاً با همین منطق کار میکند؛ برنامه منتظر نتیجه میماند، اما بی دلیل همه چیز را متوقف نمی کند.
 

 Async و Await چه تفاوتی دارند؟

Async به زبان برنامه نویسی اعلام میکند که یک متد ممکن است عملیات زمانبری انجام دهد و نتیجه آن فوراً آماده نباشد.
Await داخل همان متد استفاده میشود و میگوید:
> منتظر پایان این عملیات بمان، اما اجرای برنامه را بی دلیل متوقف نکن.
همین ویژگی باعث میشود کدها بسیار خواناتر و ساده تر از روشهای قدیمی مانند Callbackها باشند.
 

 یک نمونه ساده در C#

public async Task GetUsers()
{
    var users = await _httpClient.GetFromJsonAsync<List<User>>("api/users");
    Console.WriteLine("اطلاعات دریافت شد.");
}
 
در این مثال:
  •  متد با `async` تعریف شده است.
  •  دستور `await` منتظر پاسخ سرور میماند.
  •  در این مدت، برنامه میتواند به انجام کارهای دیگر ادامه دهد.
اگر هنوز با این کد کاملاً آشنا نیستید، نگران نباشید؛ هدف فعلاً فقط آشنایی با نحوه استفاده از Async/Await است.
 

 آیا Async/Await باعث افزایش سرعت برنامه میشود؟

یکی از رایج ترین باورهای اشتباه این است که Async/Await عملیات را سریع تر اجرا میکند.
در واقع اگر دریافت اطلاعات از یک سرور ۲ ثانیه طول بکشد، استفاده از Async/Await آن را به ۱ ثانیه تبدیل نمیکند.
مزیت اصلی این است که در طول این ۲ ثانیه، برنامه بلاک نمیشود و پاسخگو باقی می ماند. بنابراین تجربه کاربری بهتر می شود و در برنامه های تحت وب، سرور نیز میتواند درخواست های بیشتری را مدیریت کند.
 
 
 اگر تا امروز زیاد از Async/Await استفاده نکردهاید...
اگر چند سال است با ASP.NET MVC، Web Forms یا پروژه های سازمانی قدیمی کار می کنید و احساس می کنید خیلی با Async/Await سروکار نداشته اید، کاملاً طبیعی است.
در بسیاری از پروژه های قدیمی، کدنویسی همزمان (Synchronous) رایج بود و حتی بسیاری از کتابخانه ها نسخه Async نداشتند.
اما با ظهور ASP.NET Core، APIهای مدرن، سرویس های ابری و نسخه های جدید .NET، استفاده از متدهای Async به یکی از استانداردهای توسعه نرم افزار تبدیل شده است.
 

 چه زمانی از Async/Await استفاده کنیم؟

استفاده از Async/Await زمانی بیشترین کاربرد را دارد که با عملیاتهای ورودی و خروجی (I/O) سروکار داشته باشید، مانند:
  •  ارتباط با پایگاه داده
  •  فراخوانی APIها
  •  خواندن و نوشتن فایل
  •  ارسال یا دریافت اطلاعات از شبکه
اما اگر متد شما فقط چند محاسبه ساده انجام میدهد و هیچ عملیات زمانبری ندارد، معمولاً نیازی به Async/Await نیست.
 

 مهمترین مزایای Async/Await

  •  خوانایی بیشتر کد
  •  مدیریت سادهتر عملیاتهای زمانبر
  •  استفاده آسان از `try/catch` برای مدیریت خطا
  •  کاهش کدهای تودرتو
  •  پاسخگویی بهتر برنامه هنگام انجام عملیات I/O
  •  نگهداری سادهتر پروژه
 
جمع بندی
Async/Await یکی از مهم ترین مفاهیم برنامه نویسی مدرن است و تقریباً در تمام زبان های مطرح مانند C، JavaScript، Python، TypeScript، Kotlin و Dart وجود دارد.
این مفهوم برنامه را ذاتاً سریع تر نمیکند، اما باعث میشود هنگام انجام عملیات هایی مانند ارتباط با پایگاه داده یا سرور، برنامه پاسخگو باقی بماند و کدها نیز خواناتر و قابل نگهداری تر شوند.
اگر قصد دارید وارد دنیای توسعه وب، ساخت Web API، اپلیکیشن های موبایل یا نرم افزارهای مدرن شوید، یادگیری Async/Await یکی از مهارت هایی است که دیر یا زود به آن نیاز خواهید داشت.
 
 
فرایانه؛ جایی که مفاهیم پیچیده برنامهنویسی را به زبان ساده، کاربردی و قابل فهم آموزش میدهیم. 💚
 
Async/Await؛ اجرای هوشمند عملیات زمان‌بر