Ho un problema nel codice seguente:Perché Task finisce anche in attesa
static void Main (string[] args)
{
Task newTask = Task.Factory.StartNew(MainTask);
newTask.ContinueWith ((Task someTask) =>
{
Console.WriteLine ("Main State=" + someTask.Status.ToString() + " IsFaulted=" + someTask.IsFaulted+" isComplete="+someTask.IsCompleted);
});
while (true)
{
}
}
static async Task MainTask()
{
Console.WriteLine ("MainStarted!");
Task someTask = Task.Factory.StartNew (() =>
{
Console.WriteLine ("SleepStarted!");
Thread.Sleep(1000);
Console.WriteLine ("SleepEnded!");
});
await someTask;
Console.WriteLine ("Waiting Ended!!");
throw new Exception ("CustomException!");
Console.WriteLine ("NeverReaches here!!");
}
voglio solo ottenere eccezione da un'attività nuova iniziato MainTask
. Ma il risultato non era quello che mi aspettavo.
MainStarted!
Main State = RanToCompletion IsFaulted = False isComplete = True
SleepStarted!
SleepEnded!
Waiting Ended!!
Come si può vedere il risultato, l'attività termina prima di "Waiting Ended !!" log della console. Non ho idea del motivo per cui MainTask
è terminato anche se in MainTask
ha il comando await
all'interno? Mi sono perso qualcosa?
Qualsiasi motivo per cui non puoi fare 'MainTask().ContinueWith (...) 'direttamente? –