在视图中渲染异步操作

时间:2019-07-01 15:03:28

标签: c# .net asp.net-mvc asp.net-mvc-5

在我们的项目中,我们只有同步方法,因此我们决定引入一些异步方法。

但是似乎在视图中使用异步操作存在一些问题...

波纹管同步动作“ 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;
}

但是该线程似乎仍在等待“结果”的阻止。...

1 个答案:

答案 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'];

就像我个人说的那样,这就是我要做的,但是使用这种方法会锁定线程,直到异步功能完成。如果它不经常被调用,这很好,但是如果它被频繁调用,您可能会看到问题的出现。