Asp.net core 对.NET内核中异步调用的混淆
我有一个控制器,如下所示:Asp.net core 对.NET内核中异步调用的混淆,asp.net-core,Asp.net Core,我有一个控制器,如下所示: public IActionResult StaticsMonthly(string id, string from, string to) { var result = _statdaily.statsMonthly(id, startDate.ToString(), now.ToString()); return Ok(result) ; } statsMonthly是我实现的接口签名: public async Task<I
public IActionResult StaticsMonthly(string id, string from, string to)
{
var result = _statdaily.statsMonthly(id, startDate.ToString(), now.ToString());
return Ok(result) ;
}
statsMonthly是我实现的接口签名:
public async Task<IEnumerable<statisticsDaily>> statsMonthly(string id, string dtFrom, string dtTo)
{
var rslt = await ( from d in db.statMonth
join s in db.masterData on d.m_turbine_id equals s.m_turbine_id
where d.m_turbine_id == IPAddress.Parse(id) && d.m_date >= frm
group d by d.m_date.Month into g
select new statisticsDaily
{
Date = g.Key.ToString("MMM"),
Production = g.Sum(s => s.m_energy_prod),
m_wind_speed = g.Average(s => s.m_wind_speed),
Availability = g.Average(s => s.m_availability)
}
).ToListAsync();
return rslt;
}
公共异步任务statsMonthly(字符串id、字符串dtFrom、字符串dtTo)
{
var rslt=等待(以db.statMonth为单位从d开始)
在db中加入s。d.m_turbine_id上的主数据等于s.m_turbine_id
其中d.m_-id==IPAddress.Parse(id)&&d.m_-date>=frm
d组按d.m_日期分为g组
每天选择新的统计信息
{
日期=g.Key.ToString(“MMM”),
产量=总产量(s=>s.m_能源产量),
m_风速=g.平均值(s=>s.m_风速),
可用性=g.平均值(s=>s.m_可用性)
}
).ToListAsync();
返回rslt;
}
我的操作返回一个
IActionResult
,但在我的操作中有一个实现异步的方法,为了实现异步的理想好处,该操作是否也应该是异步的?如果您在代码中的某个地方使用async/await,您应该返回并将async/await添加到整个代码流中。在您的例子中,
statsMonthly
方法是异步的。因此,无论您在何处调用此方法,最好也使用async
因此,我将重写控制器方法,如下所示:
public async Task<IActionResult> StaticsMonthly(string id, string from, string to)
{
var result = _statdaily.statsMonthly(id, startDate.ToString(), now.ToString());
return Ok(await result) ;
}
public async Task statisticsMonthly(字符串id、字符串from、字符串to)
{
var result=_statdaily.statsMonthly(id,startDate.ToString(),now.ToString());
返回Ok(等待结果);
}
是。当前您正在返回一个任务
,它可能永远不会运行。您没有返回方法调用的结果。据我所知,Ok()
没有为运行任务you@SamiKuhmonen所以任务应该在控制器内部执行,对吗?