Визуализация асинхронных действий в представлении - PullRequest
0 голосов
/ 01 июля 2019

В нашем проекте у нас были только синхронные методы, поэтому на данный момент мы решили ввести несколько асинхронных.

Но, похоже, существуют некоторые проблемы с использованием асинхронных действий в представлении ...

Ниже синхронное действие "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 заблокирован во время ожидания асинхронного операция завершена.

Действие контроллера My Home

[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 голосов
/ 01 июля 2019

Лично я бы вызвал ActionResult из представления, а затем вызвал бы асинхронную функцию из этого.

Вид:

@Html.Partial("//HomePartial path")

Контроллер:

public ActionResult HomePartial()
{
    var something = Task.Run(() => the call to the asynchronous function).Result;

    return PartialView("//partial path") //etc
}

Как я и сказал лично, это то, что я хотел бы сделать, однако использование такого рода метода блокирует поток, пока не завершится асинхронная функция. Это хорошо, если он не вызывается часто, однако, если он вызывается часто, могут возникнуть проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...