web-dev-qa-db-ja.com

Startup.csでConfigureServicesメソッドを非同期にします。

Startup.csのConfigureServicesにいくつかの待機関数を追加する必要があり、問題が発生しています。

System.InvalidOperationException必要なサービスが見つかりません。アプリケーションの起動コードで「IApplicationBuilder.ConfigureServices(...)」または「IApplicationBuilder.UseMvc(...)」の呼び出し内で「IServiceCollection.AddMvc()」を呼び出して、必要なすべてのサービスを追加してください。

以下のコードからわかるように、AddMvcとUseMvcは正しい場所にありますが、それでもこのエラーが発生します。

public async void ConfigureServices(IServiceCollection services)
{
    ...
    await manager.Initialize();
    var data = await manager.GetData();
    ...
    services.AddMvc();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env,ILoggerFactory loggerFactory)
{
    ...
    app.UseMvc();
    ....
}

ConfigureServicesを非同期関数にすることは可能ですか?

31
Brian

いいえ、できません。これを行うと、競合状態が発生します。

代わりに、操作を同期にするか、.Wait()/.Result(asyncメソッドがデータを返すかどうかに応じて)を使用して、非同期タスクが完了するまでブロックすることを検討してください。

29
Pinpoint