- Вы должны будете отслеживать задачи, которые вы создаете, чтобы иметь возможность обратиться к ним позже. Например:
private static List<Task> _taskList = new List<Task>();
private static void TaskMethod()
{
while(runningService)
{
// This will create more than one task in parallel to run and each task can take upto 30 minutes to finish
_taskList.Add(Task.Run(() => TaskMethod1(arg1)));
}
}
internal static void Stop()
{
runningService = false;
Task.WaitAll(_taskList.ToArray());
Task1.Wait();
}
Потому что
Task1
не зависит от выполнения других задач. В
TaskMethod()
вы просто создаете
Task
и идете дальше. Там нет ничего, что говорит ему ждать чего-либо. Если вы не
await
или
.Wait()
в
Task
, возвращенном из
Task.Run
, ваш код просто продолжает работать без зависимости от только что созданного
Task
.
Это проблема Я вижу в вашем коде, как у вас есть. Ваш while(runningService)
l oop будет l oop настолько быстро, насколько позволяет ваш процессор, создавая тысячи новых задач за считанные секунды. Вы уверены, что это то, что вы хотите?
Может быть, вы хотите, чтобы оно ожидало в l oop его завершения, прежде чем начинать цикл и запускать новое? Если я прав, то ваш l oop должен выглядеть так:
private static async Task TaskMethod()
{
while(runningService)
{
// This will create more than one task in parallel to run and each task can take upto 30 minutes to finish
await Task.Run(() => TaskMethod1(arg1));
}
}
Но это создаст только один Task
за один раз.