استفاده از async به معنای خالی کردن ترد جاری کدهای مدیریت شدهی دات نت است و انجام سایر کارهای برنامه و صبر کردن برای دریافت پاسخی است که در سمت کدهای مدیریت شده نیازی به پردازش و محاسبه ندارد.
برای مثال در حالت کار با یک دیتابیس، این موتور بانک اطلاعاتی است که کوئری رسیده را پردازش میکند و برنامهی ما صرفا درخواستی را به آن ارائه داده است. به این ترتیب در اینجا استفاده از async برای خالی کردن ترد جاری و صبر کردن جهت دریافت نتیجهی اطلاعات از سرور مفید است و میزان پاسخدهی برنامه را بالا میبرد.
بنابراین استفاده از async در سمت کدهای دات نتی، تاثیری بر روی عملکرد یک بانک اطلاعاتی ندارد. فقط در سمت کدهای ما است که برنامه تا رسیدن و محاسبهی درخواست توسط بانک اطلاعاتی، هنگ نمیکند.
در این حالت اگر برنامهی شما ویندوزی است، ترد UI آن آزاد شده و برنامه مدام در حال هنگ به نظر نمیرسد. اگر برنامهی وب است، ترد جاری آن آزاد شده و thread pool برنامه میتواند از این ترد آزاد شده، برای پردازش سایر درخواستهای رسیده توسط کاربران استفاده کند. به این ترتیب بازدهی و اصطلاحا throughput
سرور افزایش پیدا میکند.
در حال حاضر تمام APIهای جدید مایکروسافت نسخهی async را هم اضافه کردهاند. برای مثال اگر از EF استفاده میکنید، از نسخهی 6 آن به بعد، متدهایی مانند ToListAsync برای کوئری گرفتن معمولی غیرهمزمان و SaveChangesAsync برای ذخیره سازی اطلاعات به صورت غیرهمزمان، اضافه شدهاند. یک مثال کامل در این مورد در اینجا
البته بدیهی است تمام ORMهای دات نتی در سطح پایین خودشان از ADO.NET استفاده میکنند. ADO.NET نیز Async API سازگار با دات نت 4.5 به بعد را مدتی است که اضافه کردهاست. برای مثال متدهایی مانند ExecuteReaderAsync ، GetFieldValueAsync و ExecuteNonQueryAsync و امثال آن به زیر ساخت ADO.NET اضافه شدهاند. اطلاعات بیشتر