【发布时间】:2016-05-25 11:04:41
【问题描述】:
我正在使用异步任务返回我使用数据字典建模的 Json 数据。我希望任务异步执行,同时它从我的方法 report.GetActiveBuildDefinitions() 和我的 CurrentState 对象调用我的数据库,该对象有一个获取我需要的数据的构造函数。这就是我说的构造函数 -> new CurrentState(BuildDef.ID);
该控制器功能正常。但是当我将警告启用为错误时。我的课没有建立。它要求我对异步任务使用 await 关键字。我尝试将它添加到返回,如return await Json(state);,但随后它给出了一个错误“不包含 getawaiter 的定义”请帮助
这是我的控制器:
[HttpGet]
public async Task<IHttpActionResult> GetBuildState()
{
try
{
List<CurrentState> state = new List<CurrentState>();
BuildReport report = new BuildReport();
List<BuildDefinition> definitions = report.GetActiveBuildDefinitions();
List<Dictionary<string, string>> buildInfo = new List<Dictionary<string, string>>();
foreach (BuildDefinition BuildDef in definitions)
{
state.Add(new CurrentState(BuildDef.ID));
}
foreach (CurrentState build in state)
{
Dictionary <string, string> entry = new Dictionary<string, string>();
if (build.ITestExists)
{
if (build.ITestState && build.BuildState)
{
entry.Add("BuildDef", build.BuildDefName);
entry.Add("GraphCode", "1");
entry.Add("WorkingBrokenTime", GetTime(build.BuildDefID));
entry.Add("Icon", "1");
entry.Add("Id", build.BuildDefID.ToString());
}
else if(build.BuildState && build.ITestState.Equals(false))
{
entry.Add("BuildDef", build.BuildDefName);
entry.Add("GraphCode", "2");
entry.Add("WorkingBrokenTime", GetTime(build.BuildDefID));
entry.Add("Icon", "0");
entry.Add("Id", build.BuildDefID.ToString());
}
else if (build.BuildState.Equals(false) && build.ITestState)
{
entry.Add("BuildDef", build.BuildDefName);
entry.Add("GraphCode", "3");
entry.Add("WorkingBrokenTime", GetTime(build.BuildDefID));
entry.Add("Icon", "0");
entry.Add("Id", build.BuildDefID.ToString());
}
else if (build.ITestState.Equals(false) && build.BuildState.Equals(false))
{
entry.Add("BuildDef", build.BuildDefName);
entry.Add("GraphCode", "0");
entry.Add("WorkingBrokenTime", GetTime(build.BuildDefID));
entry.Add("Icon", "0");
entry.Add("Id", build.BuildDefID.ToString());
}
}
else
{
if (build.BuildState)
{
entry.Add("BuildDef", build.BuildDefName);
entry.Add("GraphCode", "4");
entry.Add("WorkingBrokenTime", GetTime(build.BuildDefID));
entry.Add("Icon", "1");
entry.Add("Id", build.BuildDefID.ToString());
}
else
{
entry.Add("BuildDef", build.BuildDefName);
entry.Add("GraphCode", "5");
entry.Add("WorkingBrokenTime", GetTime(build.BuildDefID));
entry.Add("Icon", "0");
entry.Add("Id", build.BuildDefID.ToString());
}
}
buildInfo.Add(entry);
}
return Json(state);
}
catch (Exception)
{
return BadRequest(ModelState);
}
}
【问题讨论】:
-
我认为您可能需要阅读一些关于
async-await模式的信息,或者在 SO 上找到一些已经回答此类问题的帖子。 -
如果您没有使用任何等待操作,请将其更改为“public IHttpActionResult GetBuildState()”。
-
当我删除异步...... Json() 方法失败并且不起作用。它给出了转换错误。 @AjinderSingh
-
@ThabaneNdaba - 错误是什么?
-
@ThabaneNdaba - 可以尝试返回 Json(state,JsonRequestBehavior.AllowGet);
标签: c# asynchronous model-view-controller