View Full Version : زمان استفاده از Async در mvc core
sara_t
پنج شنبه 14 تیر 1397, 13:39 عصر
سلام
دوستان برای یک ریپازیتوری عمومی متدها رو بصورت Async بنویسم بهتر هست یا بصورت ساده ؟ و در کنترلر فراخوانی رو بصورت async انجام بدم ؟ ممنون
public async Task Add(TEntity entity)
{
await _dbContext.Set<TEntity>().AddAsync(entity);
}
یا
public void Add(TEntity entity)
{
_dbContext.Set<TEntity>().Add(entity);
}
ali_md110
پنج شنبه 14 تیر 1397, 14:16 عصر
این لینک ابتدا بخونید
http://barnamenevis.org/showthread.php?547762
و جهت تکمیل لینک بالا
هر زمان یک متدی دارید که درون اون فقط یک لیست و یا بهتر بگم فقط یک کوئری TolistAsync دارید نیاز به تعریف async در تعریف امضای متد نیستیم و همچنین await در بدنه کد نیست
مثلا اگر تابعی دارید بدینصورت
public async Task GetAllAsync()
{
var list=await dbcontext.person.ToListAsync();
var list2=await dbcontext.persondetails.ToListAsync();
foreach(var p in list)
var li=list2.first(x=> x.id=p.id);
}
چون در این تابع از جدول person واکشی کردیم وبلافاصله به نتیجه اون در همین متد نیاز داریم مجبوریم از async و await در این متد استفاده کنیم کامپایلر هم به ما هشدار میدهد
ولی اگر یک متد داریم که فقط یک tolist دارد و در سایر متدها ی دیگر قابل استفاده میکنیم جهت سربار کمتر امضای متد را بدون async تعریف و await را هم از بدنه کد حذف کنید
و هنگام صدا زدن کافیه قبل از متد await را بکار ببریم
Task List<Person>Get()
{
return dbcontext.persons.ToListAsync();
}
روش صدا زدن
async Task CallMetod()
{
var i=await Get()
}
sara_t
پنج شنبه 14 تیر 1397, 16:01 عصر
خیلی ممنونم
در واقع منظورتون اینه که نتیجه متد get رو بصورت Async برگردونیم مثل این مورد درسته؟
public async Task<IActionResult> Index()
{
var qMenu = await Task.FromResult(_repository.Get());
return View("Index", qMenu);
}
ali_md110
پنج شنبه 14 تیر 1397, 16:51 عصر
Task.FromResult زمانی استفاده میکنیم که بخواهیم نتیجه انی یک Task را بگیریم مثلا یک متد async که یک مقدار عددی بر میگرداند
بهتر ست برای متدهای لیستی بدین روش بکار ببریم
public async Task<IActionResult> Index()
{
var qMenu = await _repository.Get();
return View("Index", qMenu);
}
sara_t
پنج شنبه 14 تیر 1397, 18:07 عصر
public async Task<IActionResult> Index()
{
var qMenu = await _repository.Get();
return View("Index", qMenu);
}
ممنون . خب اگه من کد رو به این صورت بنویسم این ارور رو دارم :
'Group' does not contain a definition for 'GetAwaiter' and no extension method 'GetAwaiter' accepting a first argument of type 'Group' could be found (are you missing a using directive or an assembly reference?)
group هم که کلاسی هست که براش ریپازیتوری ساختم
ali_md110
جمعه 15 تیر 1397, 00:17 صبح
متد Get به درستی به صورت asyncپیاده سازی نشده
لطفا کدهاشو ارسال کنید
sara_t
شنبه 16 تیر 1397, 15:30 عصر
متد Get به درستی به صورت asyncپیاده سازی نشده
مرسی. پست قبلی شما رو اشتباه برداشت کرده بودم متد رو بدون async نوشته بودم . ممنون
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.