可以使自定义模型联编程序异步吗?

时间:2019-04-22 19:59:15

标签: c# asp.net-web-api asp.net-web-api2

我有一个自定义模型活页夹,需要访问数据库。我可以同步执行此操作,但我想异步执行。

public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
    var json = actionContext.Request.Content.ReadAsStringAsync().Result; // nothing to see here
    Truck truck = JsonConvert.DeserializeObject<Truck>(json);
    truck.Availability = await _truckRepo.GetAvailability(truck.Id); // <-- problem. BindModel is a synchronous method
}

当然,还有其他方法可以使该对象水合。我可以将其设置在控制器的第一行。但是我将始终需要获取Availability,所以如果到达控制器时已经将其水化,那就太好了。我可以通过执行truck.Availability = _truckRepo.GetAvailability(truck.Id).Result来强制它同步运行,但是它将是...同步的。有没有办法做到这一点,并且仍然是异步的?如果将它们全部包装在一个任务中,在任务内部等待,然后强制任务同步怎么办?像这样:

var success = Task.Run(async () =>
{
    var json = await actionContext.Request.Content.ReadAsStringAsync();
    Truck truck = JsonConvert.DeserializeObject<Truck>(json);
    truck.Availability = await _truckRepo.GetAvailability(truck.Id);
    return true;
}).Result;

假设数据库调用花费很长时间(idk说三秒钟),那么这样做能从中受益吗?

0 个答案:

没有答案