转换为异步需要帮助

时间:2016-05-11 12:23:30

标签: c# asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我无法转换为异步操作。它说等待必要

public async Task<JsonResult> Get_Fare_TypeAsync()
            {
                var types = db.Types.Select(e => new { ID = e.Code, Description = e.Description, Value = e.Code, SortOrder = e.SortOrder }).ToList().OrderBy(x => x.SortOrder);


                return Json(types ,JsonRequestBehavior.AllowGet);
            }

2 个答案:

答案 0 :(得分:1)

  

我无法转换为异步操作。它说等待必要

你正在倒退这个问题。您正试图强制 Get_Fare_Type异步。

更好的方法是从“另一面”开始 - 也就是你调用的API。评估您的API调用并确定它们是否具有异步备选方案。

然后,从这些API开始,更改它们以使用异步版本,并使用await。在此示例中,您将使用EF6的ToListAsync

public JsonResult Get_Fare_Type()
{
  var types = (await db.Types.Select(e => new { ID = e.Code, Description = e.Description, Value = e.Code, SortOrder = e.SortOrder }).ToListAsync()).OrderBy(x => x.SortOrder);

  return Json(types, JsonRequestBehavior.AllowGet);
}

现在,编译器会向您发出错误,并说您需要将其设为async并将返回类型更改为Task<JsonResult>。这是下一步:

public async Task<JsonResult> Get_Fare_TypeAsync()
{
  var types = (await db.Types.Select(e => new { ID = e.Code, Description = e.Description, Value = e.Code, SortOrder = e.SortOrder }).ToListAsync()).OrderBy(x => x.SortOrder);

  return Json(types, JsonRequestBehavior.AllowGet);
}

现在,此方法的每个调用者都需要使用await

答案 1 :(得分:0)

要使用async,您还必须使用等待。

以下是示例:

public async Task<JsonResult> Get_Fare_TypeAsync()
            {
                var types = db.Types.Select(e => new { ID = e.Code, Description = e.Description, Value = e.Code, SortOrder = e.SortOrder }).ToList().OrderBy(x => x.SortOrder);


                return Json(types ,JsonRequestBehavior.AllowGet);
            }

要调用此方法,您必须执行以下操作:

JsonResult result = await Get_Fare_TypeAsync

可在此处找到更多说明:Asynchronous Programming with async and await (C#)