使用可能なプロセッサの数に依存するタスクのリストを作成しようとしています。奇妙な動作をしているように見える for ループがあります。私はJavaScriptのクロージャーの概念を認識しており、ここで同様のことが起こっているようです:
var tasks = new Task[Environment.ProcessorCount];
for(int x = 0; x < Environment.ProcessorCount; x ++)
{
tasks[x] = Task.Run(() => new Segment(SizeOfSegment, x * SizeOfSegment, listOfNumbers).generateNewList());
}
私が見つけているのは、for ループの行を中断すると、変数 x が正しいように見えるため、0 から始まり 3 で終わることです (プロセッサの数は 4)。しかし、Segment のコンストラクター内にブレーク ポイントを配置すると、コール スタックに戻ったときに x が実際には 4 であることがわかりました。
どんな助けでも大歓迎です。