Вот этот код: static List<bool> worked = new List<bool>(); int xCoord = -100; public static void Start() { for (; xCoord < maxBlock; xCoord++) { List<Thread> threads = new List<Thread>(); worked = new List<bool>(); for (int i = 0; i < 3; i++) { threads.Add(new Thread(() => Work(xCoord + i))); threads[i].Start(); worked.Add(true); } while (true) { if (worked.Where(x => x == true).ToList().Count != 0) Thread.Sleep(100); else break; } xCoord += secondArg; Save(@"C:\\p.txt", xCoord, countBedrock, coordinatesMinBedrockCount, coordinatesMaxBedrockCount); } } public static void Work(int x) { Console.WriteLine(x); int z = -1875000; dateStart = DateTime.Now; for (; z < maxBlock; z++) countBedrock += GetBedrockChunk(z, x); Console.WriteLine(xCoord + "||" + x); worked[xCoord - x] = false; } Код static List<bool> worked = new List<bool>(); int xCoord = -100; public static void Start() { for (; xCoord < maxBlock; xCoord++) { List<Thread> threads = new List<Thread>(); worked = new List<bool>(); for (int i = 0; i < 3; i++) { threads.Add(new Thread(() => Work(xCoord + i))); threads[i].Start(); worked.Add(true); } while (true) { if (worked.Where(x => x == true).ToList().Count != 0) Thread.Sleep(100); else break; } xCoord += secondArg; Save(@"C:\\p.txt", xCoord, countBedrock, coordinatesMinBedrockCount, coordinatesMaxBedrockCount); } } public static void Work(int x) { Console.WriteLine(x); int z = -1875000; dateStart = DateTime.Now; for (; z < maxBlock; z++) countBedrock += GetBedrockChunk(z, x); Console.WriteLine(xCoord + "||" + x); worked[xCoord - x] = false; } При запуске в консоль выводит "-100 -99 -100" А должно быть "-100 -99 -98" в любой последовательности ммм, я решил изменить немного код static List<bool> worked = new List<bool>(); int xCoord = -100; public static void Start() { for (; xCoord < maxBlock; xCoord++) { List<Thread> threads = new List<Thread>(); worked = new List<bool>(); threads.Add(new Thread(() => Work(xCoord + 0))); threads.Add(new Thread(() => Work(xCoord + 1))); threads.Add(new Thread(() => Work(xCoord + 2))); worked.Add(true); worked.Add(true); worked.Add(true); threads[0].Start(); threads[1].Start(); threads[2].Start(); while (true) { if (worked.Where(x => x == true).ToList().Count != 0) Thread.Sleep(100); else break; } xCoord += secondArg; Save(@"C:\\p.txt", xCoord, countBedrock, coordinatesMinBedrockCount, coordinatesMaxBedrockCount); } } public static void Work(int x) { Console.WriteLine(x); int z = -1875000; dateStart = DateTime.Now; for (; z < maxBlock; z++) countBedrock += GetBedrockChunk(z, x); Console.WriteLine(xCoord + "||" + x); worked[xCoord - x + 1] = false; } Код static List<bool> worked = new List<bool>(); int xCoord = -100; public static void Start() { for (; xCoord < maxBlock; xCoord++) { List<Thread> threads = new List<Thread>(); worked = new List<bool>(); threads.Add(new Thread(() => Work(xCoord + 0))); threads.Add(new Thread(() => Work(xCoord + 1))); threads.Add(new Thread(() => Work(xCoord + 2))); worked.Add(true); worked.Add(true); worked.Add(true); threads[0].Start(); threads[1].Start(); threads[2].Start(); while (true) { if (worked.Where(x => x == true).ToList().Count != 0) Thread.Sleep(100); else break; } xCoord += secondArg; Save(@"C:\\p.txt", xCoord, countBedrock, coordinatesMinBedrockCount, coordinatesMaxBedrockCount); } } public static void Work(int x) { Console.WriteLine(x); int z = -1875000; dateStart = DateTime.Now; for (; z < maxBlock; z++) countBedrock += GetBedrockChunk(z, x); Console.WriteLine(xCoord + "||" + x); worked[xCoord - x + 1] = false; } И этот код уже возвращает "-100 -99 -98" в любой последовательности То есть прошлый код не работает, а этот уже работает может кто рассказать, с хуяли это происходит?
Pashok576, Ну т.к потоки асинхронны, они могут закончить работу в разное время и в консоль вывести не "100, 99, 98", а "99, 100, 98"
worked.Where(x => x == true).ToList().Count != 0 Код worked.Where(x => x == true).ToList().Count != 0 BadCode