1. ホーム
  2. asp.net-mvc

[解決済み] ASP.NET Core : 同期操作は許可されていません。WriteAsyncを呼び出すか、AllowSynchronousIOをtrueに設定することで代用できます。

2023-06-10 14:28:30

質問

ASP.NETのコアサーバを使用しています。 AllowSynchronousIO に設定されています。 false

        new WebHostBuilder()
        .UseKestrel(options =>
        {
            options.AllowSynchronousIO = false;
        })

アクションでは、JsonResultを出力しています。

    public async Task<IActionResult> SanityCheck()
    {
        Dictionary<string, string> dic = await GetDic();

        return this.Json(dic);
    }

そして、それは例外で終わります

System.InvalidOperationExceptionが発生しました。同期操作は は許可されません。代わりにWriteAsyncを呼び出すか、AllowSynchronousIOをtrueに設定してください。

でJsonResultを返してはいけないのでしょうか? AllowSynchronousIO=false ?

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

以下のような問題があるかもしれません。 https://github.com/aspnet/AspNetCore/issues/8302

さらに詳しい情報はこちらでどうぞ。 https://github.com/aspnet/AspNetCore/issues/7644

この問題が解決されるまでの回避策は、同期 IO を許可することです。Kestrel または IIS のいずれかの Startup.cs にこれを記述します。

public void ConfigureServices(IServiceCollection services)
{
    // If using Kestrel:
    services.Configure<KestrelServerOptions>(options =>
    {
        options.AllowSynchronousIO = true;
    });

    // If using IIS:
    services.Configure<IISServerOptions>(options =>
    {
        options.AllowSynchronousIO = true;
    });
}