在这段代码中,我得到了一个警告:因为此调用未被等待,所以在完成调用之前,当前方法的执行将继续进行。请考虑对调用结果应用“await”运算符。
public async Task<ActionResult> Details(Guid id)
{
var calendarEvent = await service.FindByIdAsync(id);
if (calendarEvent == null) return RedirectToAction<CalendarController>(c => c.Index());
var model = new CalendarEventPresentation(calendarEvent);
ViewData.Model = model;
return View();
}
public async Task<RedirectResult> Create(CalendarEventBindingModel binding)
{
var model = service.Create(binding);
await context.SaveChangesAsync();
return this.RedirectToAction<CalendarController>(c => c.Details(model.CalendarEventID));
}
如果我添加await
操作符,会得到以下错误:
Error CS4034 The 'await' operator can only be used within an async lambda expression. Consider marking this lambda expression with the 'async' modifier.
如果我像这样添加async
修饰符:
return this.RedirectToAction<CalendarController>(async c => await c.Details(model.CalendarEventID));
错误信息为Error CS1989 异步lambda表达式无法转换为表达式树
那么我如何在使用异步控制器时使用强类型的RedirectToAction呢?(我正在使用MVC Futures)
Func<Task<ViewResult>>
或其他类似的参数,然后将其转换为 futures 版本(非异步)的表达式。 - AgentFire#pragma
禁用警告似乎不是解决此问题的正确方法。希望有更聪明的人来解决这个问题。以下链接似乎与此相关:https://dev59.com/B2Af5IYBdhLWcg3w0Ve6 - miha