【发布时间】:2015-07-01 12:14:09
【问题描述】:
我有一个异步“上游”方法。我正在尝试遵循最佳实践,并在堆栈中全力以赴。
在 MVC 中的控制器操作中,如果我依赖 .Result(),我可以预见会遇到死锁问题。
将控制器操作更改为异步似乎是可行的方法,但问题是异步方法在 lambda 中被多次调用。
如何等待返回多个结果的 lamda ?
public async Task<JsonResult> GetLotsOfStuff()
{
IEnumerable<ThingDetail> things= previouslyInitialisedCollection
.Select(async q => await GetDetailAboutTheThing(q.Id)));
return Json(result, JsonRequestBehavior.AllowGet);
}
你可以看到我已经尝试使 lambda 异步,但这只是给出了一个编译器异常:
无法转换源类型
System.Collections.Generic.IEnumerable<System.Threading.Tasks.Task<ThingDetail>到目标类型System.Collections.Generic.IEnumerable<ThingDetail>
我哪里错了?
【问题讨论】:
-
现在您选择返回带有任务的枚举,但是您尝试将其分配给带有 ThingDetail 的枚举,因为您可以使用
var关键字直接声明类型,例如:var things=...而不是IEnumerable<ThingDetail> things = ... -
result未在代码块中定义。大概,你的意思是return Json(things, JsonRequestBehavior.AllowGet)?
标签: c# asp.net-mvc linq asynchronous lambda