У меня есть приложение C# со списком задач. Внутри задачи некоторые задачи создают новый поток и ждут его завершения следующим образом:
Thread CompileThread = new Thread(LoadAndCompile, 10000000); //Use a new thread to compile because a 1MB stack is too small.
CompileThread.Start();
CompileThread.Join();
Если я вызываю эти задачи с помощью цикла foreach, все в порядке; задачи LoadAndCompile выполняются последовательно, и все выполняется до завершения, как и ожидалось.
Если я помещу эти задачи в Parallel.ForEachAsync, действия LoadAndCompile завершится с ошибкой. Меня это смущает; Я получаю результаты внутри потока, предполагающие, что между моими потоками, порождаемыми внутри цикла Parallel.ForEachAsync, существует некое общее состояние, хотя в используемых мной классах нет статических переменных.
Есть ли этому объяснение взаимодействия между Parallel.ForEachAsync и Thread.Start()/Thread.Join(), которое я не понимаю, или это звучит так, будто у меня есть статическая/общая переменная, которая Я не знаю?
Вот сломанная версия, а рабочая версия показана в комментариях ниже:
var options = new ParallelOptions()
{
MaxDegreeOfParallelism = 20
};
CancellationToken ct = new CancellationToken();
await Parallel.ForEachAsync(selectedControllerPaths, options, async (selectedControllerPath, ct) => {
await System.Threading.Tasks.Task.Run(() => ImportControllerMulti(selectedControllerPath.FilePath));
});
//foreach (var selectedControllerPath in selectedControllerPaths)
//{
// await System.Threading.Tasks.Task.Run(() => ImportControllerMulti(selectedControllerPath.FilePath));
//}
Подробнее здесь: https://stackoverflow.com/questions/790 ... de-to-inte
Почему запуск нового потока внутри Parallel.ForEachAsync приводит к тому, что мой код мешает сам себе? ⇐ C#
Место общения программистов C#
1727382608
Anonymous
У меня есть приложение C# со списком задач. Внутри задачи некоторые задачи создают новый поток и ждут его завершения следующим образом:
Thread CompileThread = new Thread(LoadAndCompile, 10000000); //Use a new thread to compile because a 1MB stack is too small.
CompileThread.Start();
CompileThread.Join();
Если я вызываю эти задачи с помощью цикла foreach, все в порядке; задачи LoadAndCompile выполняются последовательно, и все выполняется до завершения, как и ожидалось.
Если я помещу эти задачи в Parallel.ForEachAsync, действия LoadAndCompile завершится с ошибкой. Меня это смущает; Я получаю результаты внутри потока, предполагающие, что между моими потоками, порождаемыми внутри цикла Parallel.ForEachAsync, существует некое общее состояние, хотя в используемых мной классах нет статических переменных.
Есть ли этому объяснение взаимодействия между Parallel.ForEachAsync и Thread.Start()/Thread.Join(), которое я не понимаю, или это звучит так, будто у меня есть статическая/общая переменная, которая Я не знаю?
Вот сломанная версия, а рабочая версия показана в комментариях ниже:
var options = new ParallelOptions()
{
MaxDegreeOfParallelism = 20
};
CancellationToken ct = new CancellationToken();
await Parallel.ForEachAsync(selectedControllerPaths, options, async (selectedControllerPath, ct) => {
await System.Threading.Tasks.Task.Run(() => ImportControllerMulti(selectedControllerPath.FilePath));
});
//foreach (var selectedControllerPath in selectedControllerPaths)
//{
// await System.Threading.Tasks.Task.Run(() => ImportControllerMulti(selectedControllerPath.FilePath));
//}
Подробнее здесь: [url]https://stackoverflow.com/questions/79029030/why-does-running-a-new-thread-inside-parallel-foreachasync-cause-my-code-to-inte[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия