【问题标题】:Is the default IServiceProvider in ASP.NET Core thread safe?ASP.NET Core 线程中的默认 IServiceProvider 是否安全?
【发布时间】:2017-08-07 10:37:07
【问题描述】:

我正在构建一个小型 ASP.NET Core 应用程序,该应用程序还有一堆在自己的线程中运行的独立业务逻辑。我已经在边程序中使用了IServiceProvider,所以当我发现 ASP.NET Core 也使用自己的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();

【问题讨论】:

    标签: c# asp.net multithreading asp.net-core


    【解决方案1】:

    The default service provider implementation。您可以看到服务工厂存储在ConcurrentDictionary 中,而building an expression for creating service object 在除第一个之外的单独线程中执行。而且我确信这个表达式也是线程安全的(可能是无状态的)。所以默认的ServiceProvider 是线程安全的。

    【讨论】:

    • 虽然链接可能会回答问题,但您应该包含代码的 sn-p 以显示您要证明的内容。
    猜你喜欢
    • 2015-07-11
    • 2016-11-28
    • 2019-10-10
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    相关资源
    最近更新 更多