Есть класс для обработки пула задач.
public class PoolManager
{
List
public async Task
});
}
}
}
return "";
}
public void Add(Func
public void Stop()
{
Active = false;
}
}
Всё работает, но есть необходимость запускать несколько паралельных таких пулов. запускаю я его так:
if (!VP[0].Active)
{
await Task.Run(async () =>
{
await VP[0].StartPool();
});
}
else VP[0].Stop();
Но таким образом я могу запустить только 1 такой поток. Как можно реализовать одновременный запуск нескольких таких потоков с возможностью в последствии обращаться к ним? И соответственно без блокировки главного потока.
Ответ
Создавать список Task'ов не нужно. Просто надо указать AttachedToParent
Task.Factory.StartNew(() => {
for(var i=0; i < 10; i++)
Task.Factory.StartNew(() => { /*... */},
TaskCreationOptions.AttachedToParent);
}).Wait();
Внешний Task дождется завершение всех Task'ов, запущенных в цикле.
Если в основном потоке не надо ждать завершения внешнего Task, то Wait не надо указывать. Но при этом этот Task будет ждать завершение работы остальных, запущенных с AttachedToParent.
Если требуется передавать данные, то надо использовать классы, например, из System.Collections.Concurrent. Пример - тут
Комментариев нет:
Отправить комментарий