2017-08-07 12 views
0

私は独自のスレッドで動作する別々のビジネスロジックを持つ小さなASP.NETコアアプリケーションを構築しています。私はすでにIServiceProviderをサイドプログラムに使用していました。そのため、ASP.NET Coreでも独自のIServiceProviderを使用していることがわかったので、1つのインスタンスだけを再利用できると思いました。ASP.NETコアスレッドのデフォルトIServiceProviderは安全ですか?

ここで、ウェブホストがスレッドセーフを使用しているのは、IServiceProviderですか?私のセットアップは基本的に次のようになります。

var host = new WebHostBuilder() 
      .UseKestrel() 
      .UseContentRoot(Directory.GetCurrentDirectory()) 
      .UseIISIntegration() 
      .UseStartup<Startup>() 
      .UseApplicationInsights() 
      .Build(); 

Task.Run(() => { 
    // here I access the IServiceProvider via `host.Services` 
    new Foo(host.Services).Run(); 
}); 

host.Run(); 

答えて

5

The default service provider implementationです。サービスファクトリがConcurrentDictionaryに格納され、building an expression for creating service objectに格納されているサービスファクトリが、最初のスレッドを除く別のスレッドで実行されていることがわかります。そして、私はこの式がスレッドセーフである(確かにステートレスである)ことを確信しています。したがって、デフォルトのServiceProviderはスレッドセーフです。

+0

リンクで質問に答えることができますが、コードのスニペットを含めると、あなたが何を証明しようとしているかが示されます。 – Nkosi

関連する問題