[英]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.