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所以任务应该在控制器内部执行,对吗?