آموزش Async Await در asp.net core

تهران آی تی / برنامــه نویــسـی / آموزش Async Await در asp.net core

آموزش Async Await در asp.net core

در این آموزش ابتدا برسی میکنیم که Async Await چیست؟ و سپس به آموزش Async Await در asp.net core میپردازیم. عبارات کلیدی async و await در نسخه ۵٫۰ زبان C# معرفی شدند تا برنامه‌نویسی ناهمگام را ساده‌تر کنند. عبارت کلیدی async برای اعلام یک متد به عنوان متد ناهمگام استفاده می‌شود. وقتی یک متد با async مشخص می‌شود، در هنگام انتظار برای جواب این متد، سایر وظایف قابل اجرا هستند.

برنامه نویسی همزمان و ناهمزمان

برای استفاده از async و await در ASP.NET Core، ابتدا باید مفهوم برنامه‌نویسی ناهمزمان – asynchronous را درک کنیم. در برنامه‌های همزمان – synchronous، عملیات‌ها به ترتیب انجام می‌شوند و اجرای یک عملیات متوقف می‌شود تا عملیات قبلی به پایان برسد. در مقابل، در برنامه‌نویسی ناهمگام، عملیات‌ها می‌توانند به‌طور مستقل از یکدیگر و بدون توقف اجرا شوند، به خصوص زمانی که نیاز به عملیات‌های زمان‌بر مانند درخواست به پایگاه داده یا شبکه داریم.

Async Await چیست؟

  • مفهوم async: وقتی متدی را به عنوان async تعریف می‌کنید، به این معناست که این متد عملیات ناهمزمان انجام می‌دهد. متدی که async است باید از نوع Task باشد.
  • مفهوم await: با استفاده از await، می‌توانیم صبر کنیم تا یک عملیات ناهمگام به پایان برسد. اجرای کد پس از await زمانی ادامه می‌یابد که عملیات قبلی تمام شده باشد، بدون اینکه کل برنامه مسدود شود.

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

  • دسترسی به دیتابیس: زمانی که از ORMهایی مثل Entity Framework Core استفاده می‌کنیم، متدهای غیرهمزمان مثل ToListAsync یا SaveChangesAsync به ما کمک می‌کنند تا از مسدود شدن thread جلوگیری کنیم. به این ترتیب، برنامه به جای منتظر ماندن برای دریافت نتیجه از دیتابیس، می‌تواند به اجرای سایر درخواست‌ها ادامه دهد.
  • فراخوانی APIهای خارجی: زمانی که باید درخواست‌هایی به سرویس‌های خارجی ارسال کنیم، استفاده از async و await این امکان را فراهم می‌کند که درخواست‌های دیگر تحت تأثیر این انتظار قرار نگیرند.
  • ورودی/خروجی فایل‌ها: اگر نیاز به خواندن یا نوشتن فایل‌ها داشته باشیم. استفاده از متدهای غیرهمزمانی مانند ReadAsync و WriteAsync اجازه می‌دهد برنامه به عملیات‌های دیگر ادامه دهد.

چه زمانی نباید از async و await استفاده کنیم؟

  • اگر عملیات شما محاسباتی است و در حافظه اجرا می‌شود (مثل عملیات ریاضی سنگین)، استفاده از async کمک زیادی نخواهد کرد.
  • برای عملیات‌هایی که به شکل طبیعی سریع و کوتاه هستند، استفاده از async ممکن است تأثیر چندانی نداشته باشد و حتی باعث پیچیدگی شود.

نکات مهم در استفاده از async و await

  • بهبود عملکرد: در برنامه‌های وبی که درخواست‌های زیادی دریافت می‌کنند، استفاده از برنامه‌نویسی ناهمگام به سرور اجازه می‌دهد که به جای مسدود کردن منابع برای درخواست‌های زمان‌بر، به درخواست‌های دیگر نیز پاسخ دهد.
  • عدم مسدود شدن UI .
  • هر متدی که await در آن استفاده شود باید async باشد.
  • از async و await برای عملیات‌هایی که زمان‌بر هستند، مانند خواندن یا نوشتن در پایگاه داده یا فایل، یا ارسال درخواست‌های HTTP استفاده می‌شود.
  • استفاده از برنامه‌نویسی ناهمگام باعث می‌شود که منابع سرور بهینه‌تر استفاده شوند، به خصوص در مواقعی که بار کاری بالا است.

نحوه پیاده سازی async و await

  • خروجی توابع، متد، اکشن و … Async از نوع Task میباشد. ولی خود Task میتواند از هر نوعی باشد مثلا Int یا Action و … اگر توابع، متد، اکشن و … Async ما Void بود نیازی به اضافه کردن مقدار خروجی به Task نمیباشد.

public async Task<IActionResult> test(){}

  • زمانی که از Async استفاده میکنیم. بهتر است به نام توابع خود مقدار Async را اضافه کنیم. اگر به نام یک اکشن مقدار Async را اضافه کنید. باید نام ویو آن را در قسمت return مشخص کنید.

public async Task<IActionResult> testAsync()
{
return View("testAsync");
}

  • وقتی از Async استفاده میکنید. حتما باید از Await استفاده کنید. Await را جایی اضافه میکنیم که برنامه باید صبر کند تانتیجه – Result برای آن برگردد.
  • وقتی از Async استفاده میکنید. برای ایجاد وقفه نباید دیگر از دستور Thread.Sleep استفاده کنید. بلکه باید از دستور await Task.Delay استفاده کنید.

await Task.Delay(1000);

  • زمانی که مثلا یک حلقه For و یا هر چیز دیگری داریم و نیاز به Await دارد. ولی نمیتوان Await را به آن اضافه کرد. میتوانید مثل زیر اقدام کنید.

private async Task<int> Sum(int num)
{
int sum = 0;
await Task.Run(() =>
{
for (int i = 0; i < num; i++)
{
sum += i;
}
});
return sum;
}

  • حال فرض کنید تابع بالا را برای یک اکشن غیر Async میخواهید فراخوانی کنید. و مقدار آن را داخل متغیری بریزید برای اینکه به شما ارور ندهد باید مانند زیر از Resualt استفاده کنید.

public IActionResult Index()
{
int sum = Sum(5).Result;
return View();
}

  • منابع در برنامه های تحت وب خیلی محدود است.پس باید آن را مدیریت کنیم. فرض کنید کاربر یک درخواست سنگین برای دریافت تعداد زیادی کاربر به سرور ارسال کرده. ولی قبل از این که خروجی برای آن آماده شود صفحه مرورگر را میبندد. در این مواقع ما باید منابع سرور را آزاد کنیم چون کسی منتظر خروجی درخواست نیست. در این مواقع از CancellationToken استفاده میکنیم.

public async Task<IActionResult> ShowAsync(CancellationToken cancellationToken)
{
await Task.Delay(30000, cancellationToken);
return View("ShowAsync");
}

دانلود فایل پاورپوینت

دانلود سورس کد پروژه از گیت هاب دانلود
جستجو کنید
دسترسی سریع
دسته ها

طراحی و پیاده سازی پروژه های طراحی سایت دانشجویی

انجام، اجرا و طراحی پروژه های طراحی سایت برای دانشجویان با HTML CSS PHP ASP.NET JAVA و ... با کمترین هزینه. برای مشاهده نمونه کارها و یا دریافت مشاوره رایگان از تیم طراحی سایت تهران آی تی با ما در تماس باشید. ما بهترین پروژه های طراحی سایت را با حداقل هزینه برای شما طراحی میکنیم - مشاوره رایگان 09121486770

مــشاوره و مشاهده نمونه کارها

مطالب مرتبط

لطفا از مطالب مرتبط با این پست دیدن فرمایید

جــذاب های هفته

از پربازدیدترین مطالب تهران آی تی در هفته ای که گذشت دیدن فرمایید

باورکردنی نیست فقط با 300 هزار تومان

طراحی سایت شما + طراحی اپلیکیشن هدیه و رایگان
این یک حراج است در مدت زمان محدود - شرکت های زیادی سایت های ارزان طراحی میکنند اما آیا کیفیت لازم را دارا هستند؟ طراحی سایت ارزان به همراه اپلیکیشن رایگان هدیه برای اولین بار توسط تهران آی تی مخصوص سازمان ها و کسب و کار های کوچک و بزرگ و حتی جدید تیم طراحی سایت تهران آی تی در کنار شماست تا شناخته شوید - مشاوره رایگان 09121486770

مــشاوره و مشاهده نمونه کارها

پشتیبانی 24 ساعته

تیم تهران آی تی در هفت روز هفته و 24 ساعت روز آماده پاسخ گویی به سوالات کاربران و ارائه مشاره رایگان میباشد