簡體   English   中英

ASP.NET Core線程中的默認IServiceProvider是否安全?

[英]Is the default IServiceProvider in ASP.NET Core thread safe?

我正在構建一個小型ASP.NET Core應用程序,該應用程序還具有在其自己的線程中運行的一堆單獨的業務邏輯。 我已經在輔助程序中使用了IServiceProvider ,因此當我發現ASP.NET Core也使用其自己的IServiceProvider ,我以為我只能重用一個實例。

現在的問題是,Web主機使用線程的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();

默認的服務提供者實現 您可以看到服務工廠存儲在ConcurrentDictionary並且在第一個線程之外的單獨線程中執行構建用於創建服務對象的表達式 而且我確信此表達式也是線程安全的(可能是無狀態的)。 因此,默認的ServiceProvider是線程安全的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM