C# 当多个任务调用同一个委托时,如何理解源?
我有这样的代码:C# 当多个任务调用同一个委托时,如何理解源?,c#,C#,我有这样的代码: public void RangeMissing(/*params*/) { Task.Factory.StartNew(() => { .... bool needReceive = true; while (needReceive) { .... lock (lockObj) { .... // c
public void RangeMissing(/*params*/)
{
Task.Factory.StartNew(() =>
{
....
bool needReceive = true;
while (needReceive) {
....
lock (lockObj) {
....
// calling third party dll method that calls MdrResponseInterpreter in its turn
}
}
}
}
public bool MdrResponseInterpreter(DNMessageDeliverer builder, DNFieldSet message)
{
.....
// i need to update needReceive here
needReceive = false;
}
多个任务可能同时执行。我需要从
MdrResponseInterpreter
更新needReceive
相应的任务的变量,如果您像此处一样锁定多个任务,则它们不会同时运行
lock (lockObj) {
MdrResponseInterpreter方法的声明表明它是一个实例方法—只需使needReceive成为一个成员并锁定该实例。我希望同时运行多个任务。我只锁定整个任务的一小部分。好的,因此,只需将needReceive放在具有MdrResponseInterpreter方法的对象上,然后DNMessageDeliver具有MdrResponseInterpreter方法,但我在多个任务中使用一个DNMessageDeliver,因此这将不起作用,因为当我在一个任务中将needReceive
设置为true时,我将更新其他任务。。。但是,如果我将在“lock(lockObj)”中,这应该会起作用,我只需要将needReceive
从dnmessagedeliver
复制到外部类……但是我不确定这是否是一个很好的方法