У меня есть 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
Я думаю, Я могу решить эту проблему, если найду способ серверного первого потока и заблокирую все остальные потоки и после завершения вызова метода первого потока сообщу результат методов другим потокам, а также отменим их, чтобы они не вызывали calculator
снова.
Использование lock
внутри метода также не то, что я ищу, потому что в этом случае снова вызывается калькулятор несколько раз ...