آموزش 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");
}

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

خرید از تهران آی تی به صورت آنلاین میباشد و لینک دانلود به صورت خودکار برای شما ایمیل میشود. همه گزینه‌ها همان فایل کامل را به شما می‌دهند. تفاوت فقط در نحوه جبران هزینه است؛ انتخاب با وجدان شماست. چنانچه نیاز به هرگونه سوال و یا کمک در خرید آنلاین داشتید با شماره 09121486770 تماس بگیرید. شماره کارت ما 6362141104352035 به نام محمدرضا احدیان میباشد.

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

سورس کد Async

شما می‌توانید سورس کد کامل Async را از طریق گیت مشاهده کنید و یا اگر گیت کار نمی‌کنید، به راحتی آن را به صورت فایل فشرده (ZIP) دانلود کنید. فایل‌های دانلودی شامل تمام بخش‌های پروژه است و می‌توانید آن را روی سیستم خود اجرا یا تغییر دهید.

سورس کد Async

مشاهده در آپارات یا یوتیوب

محتوای ویدیویی این صفحه در سایت قابل مشاهده است. اما اگر عادت دارید توی پلتفرم آپارات یا یوتیوب ویدیوها را مشاهده کنید، می‌توانید از دکمه‌های زیر استفاده کنید.

تماشای ویدیوی آموزش Async Await در asp.net core در آپارات و یوتیوب

اشتراک‌گذاری با یک کلیک

با یک کلیک، محتوای این صفحه را در شبکه‌های اجتماعی، ایمیل یا پیام‌رسان‌های مورد علاقه‌تان به‌سرعت به اشتراک بگذارید.

اشتراک‌گذاری صفحه آموزش Async Await در asp.net core در شبکه‌های اجتماعی

نظرات ارزشمند شما

نظرات شما برای ما ارزشمند است و آنها را میخوانیم و پاسخ میدهیم.

تصویر کامین اتشین

سلام و ارادت استاد ارجمند
اول از همه ازتون تشکر می کنم بخاطر این بزرگواری و از خود گذشتگی .ویدیو های آموزشی با کیفیت و عالی . خسته نباشید دارم لذت می برم
فقط یک مشکلی در دانلود فایل های پاور پوینت و برخی دیگر از قالب فایل دارم انکار مشکلی در دانلود وجود دارد!!!! انگار لینک دانلود کار نمی کنه
در صورت امکان بررسی بفرمائید.
سپاس فراوان و آرزوی سلامتی و موفقیت روزافزون

تصویر محمدرضا احدیان

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

تصویر alamir

با سلام
من بین این دو کد موقع اجرا تفاوتی نمیبینم
static async Task Main(string[] args)
{
Console.WriteLine("Task 1 started");
await Task.Delay(3000); // This blocks until finished
Console.WriteLine("Task 2 started");
}
------------------------------------------------
static void Main(string[] args)
{
Console.WriteLine("Task 1 started");
Thread.Sleep(3000); // This blocks until finished
Console.WriteLine("Task 2 started");
}
هردو ۳ ثانیه صبر میکنند بعد پیام بعدی را نشان میدهند در حالی که برای اولی قبل از انتظار پیام بعدی مگر نباید نشان میداد؟؟؟؟

تصویر مهسا بابکی

سلام و عرض ادب و احترام به استاد بی بدلیل برنامه نویسی
آموزش های شما فقط آموزش برنامه نویسی نیست شرافت و سخاوت و انسانیت هست که زمان و وقت انرژی گذاشتید و این آموزه ها را رایگان در بستر اینترنت قرار دادید واقعا زبان قاصر هست برای تشکر و سپاسگزاری از شما.

تصویر محمدرضا احدیان

ممنون از محبت و لطفی که به ما دارید ❤️❤️❤️

فرم افزودن دیدگاه

با ارسال نظرات خود ما را در ایجاد محتوای بهتر کمک کنید.

با خدمات تهران آی تی آشنا شوید

تهران آی تی با افتخار خدمات زیر را ارائه می‌دهد.