让我们假设有两个任务:
Task.Run(() => {
while (!this.isCanceled)
DoOperation(obj);
});
和
Task.Run(() => {
foreach(var obj in objects) // Another objects' subset
while(!this.isCancelled)
DoOperation(obj);
});
和DoOperation(Foo obj)
实现:
DoOperation(Foo obj)
{
if (obj.IsBar && obj.IsFoo)
obj.MakeSad();
else
obj.MakeHappy();
}
我们可以锁定方法DoOperation
,一切都应该很好,但是这种方法在性能方面存在一些负面影响。而且,使用DoOperation
方法可以一次处理许多任务。
第二种方法是将整个方法复制到每个任务中。但情况更糟。
所以问题是如何避免锁定并防止代码重复?