次のコードが順次実行されるのはなぜですか?
List<Task> tasks = new List<Task>();
for (int i = 0; i <= max; i += block)
{
if (i + block >= max)
tasks.Add(Task.Factory.StartNew(() => Count(ref counter, block)));
else
block = max - i;
}
Task.WaitAll(tasks.ToArray());
を使用して、これのバージョンもテストしましたParallel.Invoke
。これも並列実行に失敗します。私が理解していないことがあるはずですが、これをグーグルで検索すると、ほとんどの場合、順次実行を強制する方法についての指示が得られます。
以下の回答に記載されている警告の 1 つに対する回答として、参照用に次の方法を含めました。
static void Count(ref int counter, int num)
{
int localCounter = 0;
for (int i = 0; i < num; i++)
if (Coin()) localCounter++;
System.Threading.Interlocked.Add(ref counter, localCounter);
}
再編集:ありがとうございました!