1. ホーム
  2. c#

[解決済み] Async PartialViewで「HttpServerUtility.Execute blocked...」という例外が発生する。

2023-05-28 23:32:36

質問

を取得しようとする部分ビューがあります。 IEnumerable<Post> をデータベースから取得しようとする部分ビューがあります。

メソッド

public static class PostService
{
    public static int PostsPerPage = 50;

    public static async Task<IEnumerable<Post>> GetRecentAsync(int page = 0)
    {
        return await entityFrameworkDbContext.Posts
            .ToListAsync();
    }
}

パーシャルビュー

public async Task<ActionResult> Recent(int page = 0)
{
    return PartialView(await PostService.GetRecentAsync(page));
}

そして、それを呼び出そうとすると

@Html.Action("Recent", "Post")

次のような例外が発生します。

HttpServerUtility.Execute は、非同期操作の完了を待っている間にブロックされました。

説明 現在の Web リクエストの実行中に、処理されない例外が発生しました。エラーの詳細とコードの発生場所については、スタックトレースを確認してください。

例外の詳細です。System.InvalidOperationException: HttpServerUtility.Execute は、非同期操作の完了を待っている間にブロックされました。

なぜこのエラーが発生するのでしょうか?動作しないはずですか?

どのように解決するのですか?

子アクションは、同期して起動する必要があります。 課題601 また、現在の MVC ライブラリにこの機能を可能にするような最近のアップデートがあるかどうかもわかりません。

課題 601 のコメントで、この機能が MVC vNext、別名 MVC6 で追加されることが示唆されています。子アクションは、次のように置き換えられるようです。 ViewComponent に置き換えられ、以下のようにビューから非同期に呼び出すことができるようです。完全な例 ここで はこちら

<div>
@await Component.InvokeAsync("YourComponent")
</div>

MVC6の詳細については、以下をご覧ください。 http://www.asp.net/vnext/overview/aspnet-vnext/overview

注:この回答は形式的なものですので、質問は回答済みとしてマークすることができます。