在我们的项目中,我们只有同步方法,因此我们决定引入一些异步方法。
但是似乎在视图中使用异步操作存在一些问题...
波纹管同步动作“ HomePartial”已转换为异步“ HomePartialAsync”(因此,没有剩余的同步动作)。
以下代码
@{
Layout = "~/Views/Shared/_LayoutPortal.cshtml";
}
<div class="col-lg-19 col-md-18 col-sm-24 col-xs-24">
<div class="row">
<div class="col-xs-24">
<div class="row">
@{Html.RenderAction<HomeController>(h => h.HomePartialAsync());}
@Html.Partial("Partials/_OffersPassion")
</div>
</div>
</div>
</div>
实际上抛出错误
HttpServerUtility.Execute在等待异步时被阻止 操作完成。
我的家庭控制器的操作
[ActionName("HomePartial")]
public async System.Threading.Tasks.Task<ActionResult> HomePartialAsync()
{
return WebConfigManager.IsCMSactivated ? await GetHomeManifCMSBlocAsync() : await GetHomeManifBlocAsync();
}
我在@JamesS建议之后更新了它
[ActionName("HomePartial")]
public ActionResult HomePartial()
{
var asyncResult = WebConfigManager.IsCMSactivated ? GetHomeManifCMSBlocAsync() : GetHomeManifBlocAsync();
var result = Task.Run(() => asyncResult).Result;
return result;
}
但是该线程似乎仍在等待“结果”的阻止。...
答案 0 :(得分:-1)
我个人会从视图中调用@Html.Partial("//HomePartial path")
,然后从该视图中调用异步函数。
查看:
public ActionResult HomePartial()
{
var something = Task.Run(() => the call to the asynchronous function).Result;
return PartialView("//partial path") //etc
}
控制器:
$expire = $_POST['expire'];
就像我个人说的那样,这就是我要做的,但是使用这种方法会锁定线程,直到异步功能完成。如果它不经常被调用,这很好,但是如果它被频繁调用,您可能会看到问题的出现。