مرجع تخصصی برنامه نویسان

بزرگترین انجمن برنامه نویسان فارسی زبان

مشکل در اجرا Asynchronouse در mvc.net

یکشنبه, 05 خرداد 1398 15:21

مشکل در اجرا Asynchronouse در mvc.net

سلام
من کد زیر را نوشته ام

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 دقیقه طول میکشد
ولی تا اتمام عملیات صفحه لود نمیشود
من باید چه تغییری ایجاد کنم
صفحه سریع لود شود و عملیات در پس زمینه انجام پذیرد
باتشکر

یکشنبه, 05 خرداد 1398 17:12

یه نکته این که Task.Run یک Thread جدید میسازه و در ساز و کار ASP همچین کاری اشتباه هستش چون هر درخواست در Thread جدا پردازش میشه.

نکته دوم اینکه عملیات پس‌زمینه در ASP معنا ندارد مگر اینکه SendMessage به اکشن Index ارتباطی نداشته باشه یعنی برای نمایش Index نیازی به نتیجه SendMessage  نداشته باشی. اگه اینطور هست اون کلمه کلیدی awiat رو بردار.

نکته بعدی اینکه Decrypt کردن برای چی انجام میشه ؟ روی چی انجام میشه ؟ چقدر آیتم توی اون لیستی که اصلا معلوم نیست از کجا آوردی هست ؟ result این وسط چی میگه و چرا new شده ؟!

نکته بعدی

برای حل یک مسئله هزاران راه وجود داره که هر راهی ممکنه به ذهن یه نفر برسه و اگه اون مسئله عمومی باشه قطعا براش best practice وجود داره.

اما خب من اصلا نمیدونم مسئله شما چی هست تا اگه دانشم جواب میداد براتون راه حل بهینه ارائه بدم.

بهتر مسئله رو بگی تا یه قطعه کد بذاری که اصلا نمیدونم قراره چیکار کنه!

موفق باشی.

ارسال پاسخ برای این تاپیک

ارسال پاسخ مخصوص اعضا سایت می باشد ! میتوانید با حساب کاربری خود وارد سایت شده یا ثبت نام کنید