线程间共享方法

问题描述 投票:-2回答:1

我有这样的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 计算器=新Func ((()=> {executionCounter ++; int结果= 0;对于(...

c# multithreading task-parallel-library
1个回答
0
投票

似乎您想要的是您的lock方法可以由任何线程执行,但是该方法只能执行一次]

© www.soinside.com 2019 - 2024. All rights reserved.