C# 从运行parallel.foreach的不同线程访问变量

C# 从运行parallel.foreach的不同线程访问变量,c#,multithreading,phantomjs,parallel.foreach,C#,Multithreading,Phantomjs,Parallel.foreach,我有这样的想法: int index = 0; Parallel.ForEach(urls, ParOpt, (url) => { var currIndex = Interlocked.Increment(ref index); var pjs = new PhantomJS(); //wrapper for PhantomJS pjs.Run(@"c:\script.js", new string[] { url}); }); 上面的代

我有这样的想法:

int index = 0;
Parallel.ForEach(urls, ParOpt, (url) =>
{
  var currIndex = Interlocked.Increment(ref index);                 
  var pjs = new PhantomJS();  //wrapper for PhantomJS
  pjs.Run(@"c:\script.js", new string[] { url});
});
上面的代码所做的是从URL列表和incrementCurrIndex变量并行打开一些页面。我的问题是: 是否可以通过不同的线程读取currIndex的值,而不是在应用程序中执行上述代码的线程?或者可以确定幻影的哪个实例打开了页面

另外,我不想使用查询字符串

是否可以通过不同的线程读取currIndex的值,而不是在应用程序中执行上述代码的线程

否。
currendex
变量是并行操作匿名方法中的局部变量。它只对方法本身可见,不能从任何其他线程直接访问

或者可以确定幻影的哪个实例打开了页面

如果您需要其他线程能够将特定URL与
PhantomJS
对象的特定实例相关联,您可以(如上面评论中所建议的)使用
ConcurrentDictionary
的实例为给定URL检索
PhantomJS
对象提供一种方便的方法


请注意,
index
currendex
变量将为匿名方法的每次并发调用提供唯一的ID,但不一定提供相对于原始
URL
集合中元素顺序的索引。线程调度的差异可能会导致调用集合中的后一个元素,该元素在调用集合中的前一个元素之前实际执行。

是否尝试访问
索引
?然后发生了什么?你想做什么<代码>索引具有给定时间的最新值,您可以从其他线程读取该值。或者,您可以尝试使用将Url映射到索引的
ConcurrentDictionary
。你的问题很模糊,你应该补充细节。