I have a method which is Async "upstream". I'm trying to follow best practice and go all-in qith async all the way up the stack.
Within a Controller action within MVC I predictably hit the deadlock issue If I rely on .Result().
Changing the Controller action to async seems to be the way to go, though the issue is that the async method is called multiple times within a lambda.
How can I await on a lamda that returns multiple results?
public async Task<JsonResult> GetLotsOfStuff() { IEnumerable<ThingDetail> things= previouslyInitialisedCollection .Select(async q => await GetDetailAboutTheThing(q.Id))); return Json(result, JsonRequestBehavior.AllowGet); } You can see I have tried making the lambda async, but this just gives a compiler exception:
Cannot convert source type
System.Collections.Generic.IEnumerable<System.Threading.Tasks.Task<ThingDetail>to target typeSystem.Collections.Generic.IEnumerable<ThingDetail>
Where am I going wrong here?
varkeyword instead declare type directly like:var things=...instead ofIEnumerable<ThingDetail> things = ...resultisn't defined in the code block. Presumably, you meant it to bereturn Json(things, JsonRequestBehavior.AllowGet)?