首页 文章

使用私有方法调用的并行ForEach查询

提问于
浏览
0

谁能告诉我以下代码是否在C#中是线程安全的:

ConcurrentBag cb = new ConcurrentBag();
Parallel.ForEach(someCollection, (param1) => 
{`
    `cb.Add(GetOutput(param1));
});

private SomeClass GetOutput(InputParameter param1)
{
    SomeClass someClassInstance = null;
    //declare local variables;

    //call an external service;
    return someClassInstance;
}

迭代中没有共享状态,迭代是独立的 . 我怀疑是GetOutput私有方法和在其中声明的局部变量 . 它们是否会为每个线程单独分配?我99.99%肯定他们会,但想寻求专家意见 .

谢谢

维卡斯

2 回答

  • 1

    我的疑问是围绕GetOutput私有方法和在其中声明的局部变量 . 它们是否会为每个线程单独分配?

    是 .

    每次调用 GetOutput 方法总是会获得自己独立的局部变量 . 局部变量仍然可以引用另一个线程可以同时使用的对象 . 但只要您的数据是本地数据,该方法就是线程安全的 .

    有关此问题的更多信息,请参阅以下类似问题中的答案 .

    Are local variables threadsafe?

  • 1

    是的,无论并发线程是否正在调用该方法,都将为每个调用分配在该方法范围内声明的任何变量 .

相关问题