اگر هدف ارائه دادن نکات مهم باشد که موارد زیادی را میتوان گنجاند. مثل گرفتن Cancellation token درخواست جاری به عنوان ورودی action و پاس دادن آن به متدهای http client تا در صورتی که درخواست اصلی منتفی شد، الکی http client کلی کار اضافه انجام نده و ضمن کنسل شدن کار، از ادامه کار سرور مقصد http client هم جلوگیری بشه. اما اگر هدف ارائه دادن مهمترین نکات نبوده بلکه تمرکز بر روی قطعه کد جاری و اصل این مطلب است نیز دو مهم وجود دارد:
۱- چرا بعد از await دوم در asp.net، مقدار System.Web.HttpContext.Current نال است، در صورتی که بدون ConfigureAwait این اتفاق نمیافتد؟
۲- آیا بنچمارک ای دارید که نشان دهد عملکرد این کد در asp.net core با و بدون configure await تفاوت میکند؟
اساسا جای configure await اگر هم قصد آموزش اش وجود داشته باشد، در mvc/web api actions & middlewares نیست، چون در بهترین حالت تفاوتی نمیکند و در بدترین حالت ایجاد مشکل میکند. در واقع وقتی کد در web api actions نوشته میشود، دیگر چند سکویی و ... معنی نمیدهد، بلکه مشخصا مثلا داریم برای asp.net core 2 mvc کد میزنیم. توصیه شده در جاهای دیگر مانند serviceها و repositoryها در صورتی که معلوم نباشد کجا قرار است استفاده شوند، مثلا asp.net باشد یا wpf، بد نیست configure await استفاده شود که اولا این کم رخ میدهد و دوما حتما باز باید در Web API/MVC action موقع فراخوانی آن متد Async از ConfigureAwait استفاده نشود. به همین علت فراخوانی Configure Await در اکثر پروژههای نرم افزاری عملا به دست فراموشی سپرده شده و در سطح فریمورکهای مطرح مانند ASP.NET Core هم دیگر استفاده نمیشود.
با توجه به این که عموما استفاده از ConfigureAwait به شکل صحیح Use caseهای کمی دارد، این قسمت از کد بیشتر مشکل زا و گمراه کننده میدانم تا مفید و آموزنده.
سپاس