我有这样的Func
:
int loopMax = 10, taskMax = 10;
int executionCounter = 0;
Func<int> calculator = new Func<int>(() =>
{
executionCounter++;
int result = 0;
for (int i = 0; i < loopMax; i++)
{
Thread.Sleep(100);
if (result + i >= int.MaxValue)
result = 0;
result += i;
}
return result;
});
可以被多个线程调用。例如这样:
Task[] tasks = new Task[taskMax];
for (int i = 0; i < taskMax; i++)
{
tasks[i] = Task.Run(() => _=calculator());
}
Task.WaitAll(tasks);
我需要在所有线程之间共享calculator
函数,并使该函数仅被调用一次。实际上,运行此代码后,executionCounter
变量的值应保持为1,并且所有线程都应具有相同的返回值。
UPDATE 1
[我想如果我找到一种方法来处理第一个线程并阻塞其他所有线程,并且在第一个线程的方法调用完成后,将方法结果发送给其他线程,并取消它们,以防止它们调用[C0,我可以解决。再次]。
在方法内使用calculator
也不是我想要的,因为在这种情况下,计算器又被多次调用了...
我有一个Func像这样:int loopMax = 10,taskMax = 10; intexecutionCounter = 0; Func
似乎您想要的是您的lock
方法可以由任何线程执行,但是该方法只能执行一次]