Проблемы многопоточности C#C#

Место общения программистов C#
Ответить
Anonymous
 Проблемы многопоточности C#

Сообщение Anonymous »


Контекст: GeneratePhase2() — это большая функция, которая генерирует график до тех пор, пока не будет достигнут определенный узел. Всякий раз, когда я запускаю свой код, потоки выполняются в том порядке, в котором они хотят, иногда происходит сбой, иногда нет, но основная проблема заключается в том, что только один из узлов, похоже, фактически выполняет функцию GeneratePhase2() всякий раз, когда я ее запускаю. Это также не один и тот же узел каждый раз. Я новичок в многопоточности и не совсем разбираюсь в этом, поэтому мне было интересно, может ли кто-нибудь умнее меня сказать мне, почему он это делает/как остановить это. Дайте мне знать, если я упустил какую-либо информацию, поскольку я не знаю, что необходимо для решения моей проблемы. Я просто хочу, чтобы все потоки выполнялись одновременно, пока один из них не завершится, затем остальные останавливаются, и он возвращает узел из завершившегося потока.
public async Task InitThreads2() { вар источник = новый CancellationTokenSource (); Токен CancellationToken = source.Token; Task thread1 = Task.Run(() => GeneratePhase2(token), token); Task thread2 = Task.Run(() => GeneratePhase2(токен), токен); Task thread3 = Task.Run(() => GeneratePhase2(токен), токен); Task thread4 = Task.Run(() => GeneratePhase2(токен), токен); Task[] Tasks = new Task[] { thread1, thread2, thread3, thread4 }; Task завершен = ждут Task.WhenAny(tasks); источник.Отмена(); возврат завершен.Результат; }
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»