Ho eseguito nuovamente un Task
al termine. Di seguito la funzione che chiamo nello Application_Start
della mia applicazione.Come eseguire più attività in C# e ottenere un evento al termine di queste attività?
private void Run()
{
Task t = new Task(() => new XyzServices().ProcessXyz());
t.Start();
t.ContinueWith((x) =>
{
Thread.Sleep(ConfigReader.CronReRunTimeInSeconds);
Run();
});
}
voglio eseguire più compiti, numero che verrà letto da setttings web.config app.
sto cercando qualcosa di simile,
private void Run()
{
List<Task> tasks = new List<Task>();
for (int i = 0; i < ConfigReader.ThreadCount - 1; i++)
{
tasks.Add(Task.Run(() => new XyzServices().ProcessXyz()));
}
Task.WhenAll(tasks);
Run();
}
cosa è il modo corretto di fare questo?
se non si vuole scavare nel costruire il proprio TaskRunner/estendere tale classe avrei probabilmente aspettare per il primo compito di porre fine utilizzando 'tasks.First(). Wait();' e quindi usa un ciclo while con Thread.Sleep per osservare lo stato delle attività rimanenti. –
Si desidera eseguire ripetutamente un pezzo di codice in intervalli di tempo prestabiliti? Sembra proprio che esista il "Timer", davvero. E, naturalmente, se vuoi restare fedele a questo, legalo al risultato di 'Task.WhenAll' e tutto funzionerà come prima. – Luaan
È necessario 'attendere Task.WhenAll (tasks);' o 'Task.WaitAll (tasks);'. Uno è una chiamata asincrona e dovrebbe essere atteso, l'altra è una funzione normale che può essere chiamata in un contesto sincrono. Ovviamente puoi anche usare il brutto 'Task.WhenAll (tasks) .Wait();' – Dorus