توی انتیتی فریم ورک کور برای عملیات CRUD یا همون Edit و Update و Insert هم حالت sync وجود داره و هم حالت Async. حتی دستور SaveChange هم به صورت SaveChangeAsync وجود داره.
حالا سوال من اینه که هنگام برنامه نویسی با سی شارپ یا Asp.net core چه زمانی بهتره از برنامه نویسی همگام یا Sync استفاده بشه و چه زمانی بهتره از برنامه نویسی ناهمگام یا Async استفاده بشه ؟ ضمنا از لحاظ کارایی با Performance چه تفاوت هایی رو با هم دارن این 2 حالت ؟
اگر ما به صورت Sync انجام بدیم دستورات رو چه وقفه ای و در کجای سیستم پیش میاد ؟
در مورد سوال اولتون که چه زمانی بهتره از برنامه نویسی همگام استفاده بشه و چه زمان ناهمگام کلا پیشنهاد مایکروسافت اینه که تا حد امکان از برنامه نویسی ناهمگام یا Async استفاده بشه و بسیاری از متدهایی که ایجاد شده خصوصا متدهای Identity فقط حالت Async دارن و حالت همگام یا Sync رو براشون ایجاد نکرده.
در رابطه با سوال بالا باید توضیح بدم خدمتتون که شما فرض کنید یک سری کد که قراره عملیات زیاد و سنگینی رو توی دیتابیس انجا بده در نظر بگیرید. شما فرض کنید هم زمان با این کدها کارهای دیگه ای هم قرار باشه توی سرور شما یا دیتابیس شما انجام بشه. خب قطعا در این حالت وقتی که اون عملیات سنگین انجام میشه تا زمانی که عملیات به پایان برسه یک وقفه ای توی کار سرور ایجاد میشه یا عملا لحظاتی سرور هنگ میکنه.
ولی وقتی شما به صورت ناهمگام یا Async اون کدها رو اجرا کنید سرور یک نخ یا Thread رو به اون دسته عملیات اختصاص میده و تمام توان سرور صرف انجام اون عملیات نمیشه و عملا کارها روان تر و بهتر انجام میشه.
مثلا قطعه کد زیر نمونه ای از برنامه نویسی ناهمگام در Asp.net core هست.
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginViewModel model)
{
if (ModelState.IsValid)
{
var user = await _userManager.FindByEmailAsync(model.Email);
}
return View("Index");
}
همونطوری که مشاهده می کنید Action با کلمه کلیدی async مشخص شده و نوع اکشن هم با Task مشخص شده. عبارت Task یعنی سرور وقتی میخواد این اکشن رو اجرا کنه یه نخ جدید رو ایجاد میکنه و در صورتی که عملیات موجود در این اکشن زمان بر بود تمام توان سرور رو نمیده به این اکشن.
در ادامه هم در همین اکشن دستور زیر رو داریم که احتمال داره زمان زیادی رو از سرور بگیره و با کلمه await مشخص شده
var user = await _userManager.FindByEmailAsync(model.Email);
در مجموع میشه گفت برنامه نویسی ناهمگام بهینه تر هست و برنامه نویسی مدرن و جدید داره به این سمت میره. برای اطلاعات بیشتر این لینک رو مطالعه بفرمایید.
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
370
- پاسخ :
1
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
909
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1281
- پاسخ :
1
|
تاریخ :
1398/08/17
- ساعت :
01:27:00 AM
- بازدید :
4746
- پاسخ :
1
|
تاریخ :
1402/09/08
- ساعت :
07:34:00 PM
- بازدید :
1113
- پاسخ :
1
|
تاریخ :
1402/09/21
- ساعت :
11:10:00 PM
- بازدید :
564
- پاسخ :
1
|
تاریخ :
1403/07/27
- ساعت :
03:21:00 PM
- بازدید :
126
- پاسخ :
1
|
تاریخ :
1403/07/26
- ساعت :
09:00:00 PM
- بازدید :
72
- پاسخ :
0
|
تاریخ :
1403/07/13
- ساعت :
12:06:00 PM
- بازدید :
300
- پاسخ :
1
|
تاریخ :
1403/05/16
- ساعت :
09:57:00 AM
- بازدید :
363
- پاسخ :
2
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
370
- پاسخ :
1
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
909
- پاسخ :
1
|
تاریخ :
1402/08/01
- ساعت :
06:25:00 PM
- بازدید :
891
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1281
- پاسخ :
1
|
تاریخ :
1398/08/17
- ساعت :
01:27:00 AM
- بازدید :
4746
- پاسخ :
1
|
تاریخ :
1402/09/08
- ساعت :
07:34:00 PM
- بازدید :
1113
- پاسخ :
1
|
تاریخ :
1402/09/21
- ساعت :
11:10:00 PM
- بازدید :
564
- پاسخ :
1
|
تاریخ :
1403/07/27
- ساعت :
03:21:00 PM
- بازدید :
126
- پاسخ :
1
|
تاریخ :
1403/07/26
- ساعت :
09:00:00 PM
- بازدید :
72
- پاسخ :
0
|
تاریخ :
1403/07/13
- ساعت :
12:06:00 PM
- بازدید :
300
- پاسخ :
1
|