考虑我有一个帮助器在子操作中执行异步操作:
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
。为什么会这样?