子操作 - 由ActionLink阻止,但不是由自定义助手

时间:2016-08-30 14:23:28

标签: c# asp.net-mvc async-await

考虑我有一个帮助器在子操作中执行异步操作:

protected virtual TResult GetFromSynchornizedContext<TResult>(Func<Task<TResult>> taskFactory)
{
    return Task.Run(async () => await taskFactory()).Result;
}

现在我的孩子行动中有一些代码:

public ActionResult SomeChild()
{
    this.ViewBag,Sth = GetFromSynchornizedContext(() => SomeAsyncThatRetunrsInt());
    return this.View();
]

SomeChild.cshtml

<a href="@Url.Action("SomeAction", "SomeController", new { routeValue = ViewBag,Sth )" >Link</a>

导致:

  

HttpServerUtility.Execute在等待异步时被阻止   操作完成。

但是,当我编写基于Html.ActionLink的自己的Url.Action时:

public static IHtmlString ActionLink(
    this HtmlHelper helper,
    string actionName,
    string controllerName,
    object routeValues)
{
    UrlHelper urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
    return  urlHelper.Action(actionName, controllerName, routeValues);
}

错误没有发生!。我相信@Url.Action也会从Action班级调用UrlHelper。为什么会这样?

0 个答案:

没有答案