در ابتدا لازم است به مفهوم Request Handler بپردازیم. هر Web Application یک Request Handler دارد.
هنگامی که یک Request وارد میشود؛ این handler مسئول پردازش و انجام فرایند تهیه Response مناسب آن و همچنین مسئول سپردن کار تهیه Data لازم برای Response به لایههای دیگر است.مفاهیم sync و async درباره نحوه کار این Request Handler هستند.
حالت Sync
Request Handler بعد از سپردن کار به واحدهای دیگر تا پایان کار تهیه Data توسط واحدهای دیگر و تولید Response (تا زمانیکه کار ریکوئست جاری به طور کامل تمام شود) ، بدون انجام کار متوقف میشود و نمیتواند به Request وارد شده بعدی سرویس بدهد و بنابراین عملاً تا پایان کار Request جاری به طور کامل متوقف میشود.
در این حالت Request Handler برای پردازش یک Request هیچ مشکلی ندارد؛ مشکل زمانی شروع میشود که تعداد Request ها از یک عدد بیشتر باشد.
در sync کار یک Request به تنهایی سریعتر انجام میشود ولی متاسفانه بازدهی Web Application شدیدا کاهش می یابد.
Sync باعث ایجاد Delay بسیار زیاد در پردازش Request های بعدی میشود و یک صف طولانی از Request به وجود می آورد که زمان انتظار برای آنها به ترتیب تصاعد میخورد. این Delay به حدی زیاد میشود که Web Application کاملاً متوقف میشود.
در sync کار اصلی Request Handler در حالت Wait قرار میگیرند و بازدهی Web Application را به حداقل ممکن میرساند.
حالت ASync
در این حالت Request Handler بعد از سپردن کار Request جاری به واحدهای دیگر، متوقف نشده و به پردازش Request بعدی میپردازد و این روند در طی کار Web Application ادامه مییابد و به این ترتیب بازدهی کل Web Application به طرز چشمگیری افزایش می یابد.
در این حالت سرعت کار هر Request به دلیل اینکه با رسیدن نوبت پردازش آن ، Request Handler بیکار نیست و باید منتظر خالی شدن زمان Request Handler بماند به تنهایی تا حدودی کم میشود ولی به دلیل اینکه کار Request Handler به تولید Response وابسته نیست ، بازدهی
Web Application در پردازش به شکل چشمگیری افزایش می یابد.
در این حالت کار یا کارهای اصلی Request Handler در حالت await قرار میگیرند.لازم به یادآوری است که async از مدتها پیش بخشی از asp.net بوده و استفاده از آن اختیاری میباشد .
در برنامه نویسی Service Oriented به دلیل تعداد زیاد Request استفاده از async الزامی است و امروزه تمام Task ها در Service از این حالت پیروی میکنند.
نحوه استفاده از async در asp.net
بوسیله دستور await میتوان تعیین کرد کدام کار توسط request handler برای request های بعدی به شکل async انجام شود.
همچنین خروجی هر method باید از نوع Task باشد.
نویسنده: علی محمد بهمنیار