Il Test_Click
di seguito è una versione semplificata del codice che viene eseguito su un thread UI (con WindowsFormsSynchronizationContext):Task.ContinueWith acquisisce il contesto del thread chiamante per la continuazione?
void Test_Click(object sender, EventArgs e)
{
var task = DoNavigationAsync();
task.ContinueWith((t) =>
{
MessageBox.Show("Navigation done!");
}, TaskScheduler.FromCurrentSynchronizationContext());
}
Devo specificare esplicitamente TaskScheduler.FromCurrentSynchronizationContext()
per assicurarsi che verrà eseguita l'azione prosecuzione sullo stesso thread UI? Oppure, ContinueWith
acquisisce automaticamente il contesto di esecuzione (quindi, rendendo l'argomento TaskScheduler
ridondante in questo caso)?
Suppongo che non lo faccia di default (a differenza di await
), ma fino ad ora non sono riuscito a trovare una risorsa online per confermarlo.
Grazie, ha perfettamente senso. Ho anche trovato [questo] (http://www.jaylee.org/post/2012/09/29/C-Async-Tips-and-Tricks-Part-3-Tasks-and-the-Synchronization-Context .aspx), correlati e molto utili. – Noseratio
Ancora più facile da trovare ora con la fonte di riferimento: http://referencesource.microsoft.com/#mscorlib/system/threading/Tasks/Task.cs#27c5b7fbe5caaa18 Detto questo, potresti spiegare cosa fa StackCrawlMark? – Kakira