- یک چنین سطری در برنامههای ASP.NET نباید وجود داشته باشد:
if (!Task.Run(() => client.IsAcceptAsync(response, secretkey)).Result)
اگر در نگارش 5x از Task.Run استفاده کنید، سبب بروز این مشکلات خواهید شد:
- تداخل با thread pool خود ASP.NET که سبب کاهش کارآیی برنامه با مصرف تردی اضافی میشود.
- سبب اجرای قطعه کد قرار گرفتهی درون آن، خارج از request context جاری میشود.
یعنی در اینجا یک ترد جدید را ایجاد کردید و همچنین با استفاده از Result اجرای غیرهمزمان کدهای داخل آنرا سد کردید. این یک سطر باز هم غیرهمزمان اجرا میشود. بنابراین نیازی به Task.Run ندارد؛ چون با مصرف کردن یک ترد اضافی، جلوی پاسخدهی برنامه را به یک درخواست ممکن میگیرد.
همچنین بجای استفادهی از Result هم به این صورت عمل کنید:
if (!client.IsAcceptAsync(response, secretkey).GetAwaiter().GetResult())
- از قطعه کد زیر استفاده نکنید. اطلاعات بیشتر
using (var client = new HttpClient())