ฉันต้องการถามว่าทำไมทั้งสองวิธีนี้จึงแตกต่างกันและส่งกลับชุดค่าที่ต่างกันสองชุด:
อันแรกที่ถูกต้องในความคิดของฉันคืนค่าจาก 0 ถึง 8 และใช้ได้กับเธรดที่แตกต่างกัน (รหัส LINQPad):
void Main()
{
var newTasks = Enumerable.Range(0, 9).Select(x => Task.Run(() => DoSomething(x)));
Task.WhenAll(newTasks);
}
public int DoSomething(int value)
{
return value;
}
ประการที่สอง ซึ่งไม่ถูกต้องในความคิดของฉัน ซึ่งคืนค่าสุ่มเป็น 9 เป็นพิเศษ แต่ยังใช้ได้กับเธรดที่แตกต่างกันด้วย
void Main()
{
var tasks = new List<Task<int>>();
for (var index = 0; index < 9; index++)
{
var task = Task.Run(() => DoSomething(index));
tasks.Add(task);
}
Task.WaitAll(tasks.ToArray());
}
public int DoSomething(int value)
{
return value;
}
เป็นไปได้ไหมที่จะแก้ไขอันที่สองแล้วได้ผลลัพธ์คล้ายกับตัวอย่างแรก?
ขอบคุณสำหรับคำตอบของคุณ