该接受的答案质疑"为什么这个Parallel.ForEach代码冻结程序吗?" 建议在WPF应用程序中用ConcurrentBag替换List使用.
我想了解是否可以在这种情况下使用BlockingCollection?
我想知道开发人员应该遵循何时(以及在何处)放置锁的指导方针.
例如:我理解应锁定此类代码,以避免另一个线程意外更改SomeHeapValue值的可能性.
class Foo
{
public SomeHeapObject myObject;
public void DoSummat(object inputValue_)
{
myObject.SomeHeapValue = inputValue_;
}
}
Run Code Online (Sandbox Code Playgroud)
然而,我的问题是,锁定有多深?例如,如果我们有这个代码:
class Foo
{
public SomeHeapObject myObject;
public void DoSummat(object inputValue_)
{
myObject.SomeHeapValue = GetSomeHeapValue();
}
}
Run Code Online (Sandbox Code Playgroud)
我们应该锁定DoSummat(...)方法,还是应该锁定GetSomeHeapValue()方法?
在编写多线程代码时,是否有任何指导都要牢记在心?