- پیشنیاز مطالعه قسمت جاری، مطالعه
6 قسمت اول این دوره است.
- «همزمان اجرا میشه»
خیر. متدهای Async واقعی مثل نمونه ارائه شده در EF غیرهمزمان اجرا میشوند. یعنی، ترد جاری را آزاد کرده و ASP.NET میتواند از آن ترد برای پاسخ دهی به یک درخواست رسیده دیگر استفاده کند.
- «باید منتظر پاسخ از db بمونه»
استفاده از await و async سبب بازنویسی بدنه متد توسط یک state machine در پشت صحنه میشوند. یعنی
اینطور نیست که روش اجرای آن blocking است و تا رسیدن پاسخ از بانک اطلاعاتی، از این ترد دیگر نمیشود استفاده کرد. جایی که await فراخوانی میشود، ترد جاری برای استفاده بعدی آزاد خواهد شد. در ادامه مابقی کدها تبدیل به یک IEnumerator میشوند که هر دستور آن شامل یک yield return است. هر مرحله که تمام شد، MoveNext این IEnumerator فراخوانی میشود تا به مرحلهی بعدی برسد. به این روش استفاده از coroutines هم گفته میشود که در سی شارپ 5، کامپایلر کار تولید کدهای آنرا انجام میدهد. برای مطالعه بیشتر:
-
انجام پی در پی اعمال Async به کمک Iterators - قسمت اول
-
انجام پی در پی اعمال Async به کمک Iterators - قسمت دوم
- «چون تا فایل آپلود نشه ذخیره آدرس تو db بی معنیه»
ذخیره آدرس هم یک قسمت از کار است و اتفاقا وابسته به سیستم جاری هم نیست. وابسته است به یک بانک اطلاعاتی که خارج از مرزهای سیستم، به صورت مستقل در حال فعالیت است (عموما البته؛ مثلا اگر از SQL Server استفاده میشود).
برای ذخیره فایلها در سیستم هم متدهای Async به کلاس Stream در دات نت 4.5 اضافه شدهاند؛ مثل
WriteAsync . در این حالت هم میتوان از await WriteAsync برای ذخیره اطلاعات و بازهم آزاد کردن ترد جاری استفاده کرد.