.NET. Что происходит с задачами, которые не завершаются до завершения метода?C#

Место общения программистов C#
Ответить
Anonymous
 .NET. Что происходит с задачами, которые не завершаются до завершения метода?

Сообщение Anonymous »

Извиняюсь, если вопрос задан некорректно — по сути, это моя первая публикация, но я долгое время слежу за ней.
Я устраняю неполадки в некотором коде .NET6, который просматривается список из нескольких тысяч элементов, и код по сути такой:

Код: Выделить всё

public async Task MyMethod()
{
foreach (var thing in things)
{
_ = Task.Run(async () => DoSomeStuffThatTakesAWhile(thing))
}
}
DoSomeStuffThatTakesAWhile() имеет журнал в самом верху, поэтому я могу видеть, когда туда попадает каждая задача. Я вижу журналы примерно для 20% элементов в списке, и больше ничего. Никаких ошибок, исключений или каких-либо других признаков проблемы. Кажется, он внезапно остановился на середине списка.
В данный момент я не могу вносить изменения в код и думаю, что смогу ответить на этот вопрос сам, немного записав в журнал. Но, к сожалению, на данный момент это невозможно.
Я ожидал увидеть журнал DoSomeStuffThatTakesAWhile() для каждого элемента в списке.
Моя теория заключается в том, что любые задачи, которые не были запланированы в потоке к моменту завершения MyMethod(), просто отбрасываются и никогда не выполняются. Вот как это работает? Я думаю, что добавление этих задач в список и выполнение WaitAll() в конце MyMethod может решить эту проблему.
Любая помощь или мысли помогут быть оцененным по достоинству.

Подробнее здесь: https://stackoverflow.com/questions/792 ... d-finishes
Ответить

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

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

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

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

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