Die Test_Click
unten ist eine vereinfachte Version von Code, der auf einem UI-Thread ausgeführt wird (mit WindowsFormsSynchronizationContext):Erfasst Task.ContinueWith den aufrufenden Threadkontext für die Fortsetzung?
void Test_Click(object sender, EventArgs e)
{
var task = DoNavigationAsync();
task.ContinueWith((t) =>
{
MessageBox.Show("Navigation done!");
}, TaskScheduler.FromCurrentSynchronizationContext());
}
Soll ich ausdrücklich TaskScheduler.FromCurrentSynchronizationContext()
angeben, um die Fortsetzung Aktion sicherstellen, dass auf dem gleichen UI-Thread ausgeführt werden? Oder erfasst ContinueWith
den Ausführungskontext automatisch (und macht in diesem Fall das Argument TaskScheduler
überflüssig)?
Ich nehme an, es tut es nicht standardmäßig (im Gegensatz await
), aber bis jetzt konnte ich keine Online-Ressource finden, um dies zu bestätigen.
Danke, macht vollkommen Sinn. Ich habe auch [das] gefunden (http://www.jaylee.org/post/2012/09/29/C-Async-Tips-and-Tricks-Part-3-Tasks-and-the-Synchronization-Context .aspx), verwandt und sehr hilfreich. – Noseratio
Noch einfacher, jetzt mit der Referenzquelle zu finden: http://referencesource.microsoft.com/#mscorlib/system/threading/Tasks/Task.cs#27c5b7fbe5caaa18 Das sagte, könnten Sie bitte erklären, was der StackCrawlMark tut? – Kakira