Sto cercando di utilizzare Task.ContinueWith
con TaskContinuationOptions.AttachedToParent
per eseguire un'attività di continuazione, ad es.Task.ContinueWith e TaskContinuationOptions.AttachedToParent
Task outerTask = new Task(() => Console.WriteLine("Outer"));
Task innerTask = outerTask.ContinueWith(t =>
{
Thread.Sleep(500);
Console.WriteLine("Inner");
},
TaskContinuationOptions.AttachedToParent | TaskContinuationOptions.OnlyOnRanToCompletion);
outerTask.Start();
outerTask.Wait();
Console.WriteLine("Outer done");
L'output di questo codice è
Outer
Outer done
Inner
ma quello che mi aspettavo/cercare di raggiungere è
Outer
Inner
Outer done
E 'possibile utilizzare AttachedToParent
per bloccare un completamento delle attività esterna, o è AttachedToParent
efficace solo per le attività annidate?
Edit:
Quello che sto cercando di realizzare è una che voglio eseguire un'attività continuazione quando outerTask
è completata con successo. Voglio outerTask
propagare eccezioni da innerTask
al chiamante, senza dover affrontare innerTask
. Se l'errore outerTask
non riesce, è sufficiente lanciare immediatamente l'eccezione (su outerTask.Wait()
senza chiamare innerTask
).
innerTask non è un'attività interna, ma un'attività che viene eseguita dopo il completamento di outerTask. Questo è il punto di "ContinueWith". – JustAnotherUserYouMayKnow
@JustAnotherUserYouMayKnow: Quindi 'AttachedToParent' viene semplicemente ignorato da' ContinueWith'? – larsmoa
In questo caso viene ignorato. Quando crei il tuo compito in un'altra attività, allora hai un compito "interiore" in cui è collegato a un genitore. – JustAnotherUserYouMayKnow