Non riesco a capire il motivo per cui il seguente codice non funziona:Perché un'attività .NET vuota non viene completata se avviata e attesa da un costruttore statico?
var task = new Task(() => { });
task.Start();
if (task.Wait(10000))
{
logger.Info("Works");
}
else
{
logger.Info("Doesn't work");
}
Lo stato di attività è bloccato su "Running", dopo il timeout scade, anche se non c'è niente da fare. Sostituire task.Start()
con task.RunSynchronously()
funzionerà comunque.
Qualcuno ha un'idea di cosa potrei fare male?
Un progetto di prova per replicare il problema è disponibile qui: http://erwinmayer.com/dl/TaskTestProject.zip. Per quanto posso vedere, non funziona se il metodo con il codice precedente viene eseguito all'interno del costruttore statico. Ma funziona se chiamato direttamente come metodo di classe statico.
questo recente post del blog MSDN sembra evidenziare le questioni connesse con costruttori statici: http://blogs.msdn.com/b/pfxteam/archive/2011/05/03/10159682.aspx
puoi pubblicare il blocco di codice completo in cui si dispone di questo definito quale metodo è questo essere eseguito in .. – MethodMan
@DJ KRAZE: Task è una delle classi principali del TPL. Vedi http://msdn.microsoft.com/en-us/library/dd460717.aspx –
Questo codice non richiede alcuna variabile o funzione esterna (eccetto la funzione di registrazione generica che può essere sostituita con qualsiasi funzione di registrazione che ti piace). –