سلام
من کد زیر را نوشته ام
public async Task<ActionResult> Index() { ViewBag.Status = "False"; await SendMessage(); return View(); } private async Task SendMessage() { Operation.DiscsList.Clear(); await Task.Run(() => { var result = new List<Disc>(); foreach (var reader in list) { Operation.List.Add(new DiscsList { Id = AESAlgorithm.DecryptText(reader.Id), name = AESAlgorithm.DecryptText(reader.name), family = AESAlgorithm.DecryptText(reader.family), tel=AESAlgorithm.DecryptText(reader.tel), }); } }); }
بخاطر سنگین (زیاد) بودن اطلاعات حدود3 دقیقه طول میکشد
ولی تا اتمام عملیات صفحه لود نمیشود
من باید چه تغییری ایجاد کنم
صفحه سریع لود شود و عملیات در پس زمینه انجام پذیرد
باتشکر
یه نکته این که Task.Run یک Thread جدید میسازه و در ساز و کار ASP همچین کاری اشتباه هستش چون هر درخواست در Thread جدا پردازش میشه.
نکته دوم اینکه عملیات پسزمینه در ASP معنا ندارد مگر اینکه SendMessage به اکشن Index ارتباطی نداشته باشه یعنی برای نمایش Index نیازی به نتیجه SendMessage نداشته باشی. اگه اینطور هست اون کلمه کلیدی awiat رو بردار.
نکته بعدی اینکه Decrypt کردن برای چی انجام میشه ؟ روی چی انجام میشه ؟ چقدر آیتم توی اون لیستی که اصلا معلوم نیست از کجا آوردی هست ؟ result این وسط چی میگه و چرا new شده ؟!
نکته بعدی
برای حل یک مسئله هزاران راه وجود داره که هر راهی ممکنه به ذهن یه نفر برسه و اگه اون مسئله عمومی باشه قطعا براش best practice وجود داره.
اما خب من اصلا نمیدونم مسئله شما چی هست تا اگه دانشم جواب میداد براتون راه حل بهینه ارائه بدم.
بهتر مسئله رو بگی تا یه قطعه کد بذاری که اصلا نمیدونم قراره چیکار کنه!
موفق باشی.
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)