簡體   English   中英

如何在 parallel.foreach 循環中使用 autofac

[英]How to use autofac inside a parallel.foreach loop

試圖將 foreach 語句更改為 parallel.foreach。 與 autofac。

我的解決方案是我試圖將 AutoFac 添加到的網絡表單站點。 我遇到問題的課程是使用標准 foreach 的 Autofac。 我想過渡到 Parrallel.foreach。 所有示例都顯示了一個 container.BeginLIfetimeScope() 但沒有關於容器是什么或如何新建一個的信息。

Parallel.ForEach(items, item =>
{
     // Note I'm calling container.BeginLifetimeScope() inside the ForEach
     using (var parallelScope = container.BeginLifetimeScope())
     {
         var aDataService = parallelScope.Resolve<IaDataService>();
         aDataService.SomeProcessing();
     }
 }

下面的代碼編譯並為我工作。 鑒於:

public interface IaDataService
{
    void SomeProcessing(object obj);
}

public class DataService : IaDataService
{
    public void SomeProcessing(object obj)
    {

    }
}

我們可以這樣做:

var containerBuilder = new ContainerBuilder();
containerBuilder.RegisterType<DataService>()
    .As<IaDataService>();
var container = containerBuilder.Build();

var items = new List<object>{"abc", 123};
Parallel.ForEach(items, item =>
{
    // Note I'm calling container.BeginLifetimeScope() inside the ForEach
    using (var parallelScope = container.BeginLifetimeScope())
    {
        var aDataService = parallelScope.Resolve<IaDataService>();
        aDataService.SomeProcessing(item);
    }
});

使用 WebForms,你可能最好使用它的特定集成: Autofac WebForms ,還有其他關於線程安全的最佳實踐問題,為你生成的每個項目生成新的范圍等。但以上應該足以開始。

暫無
暫無

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

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