In Bezug auf dieses Stück Code in WPF UI-Thread ausgeführt:Warum Async Rückruf
static async Task<string> testc()
{
Console.WriteLine("helo async " + Thread.CurrentThread.ManagedThreadId);
await Task.Run(() => {
Thread.Sleep(1000);
Console.WriteLine("task " + Thread.CurrentThread.ManagedThreadId);
});
Console.WriteLine("callback "+Thread.CurrentThread.ManagedThreadId);
return "bob";
}
static void Main(string[] args)
{
Console.WriteLine("helo sync " + Thread.CurrentThread.ManagedThreadId);
testc();
Console.WriteLine("over" + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(2000);
Console.ReadLine();
}
ich folgende Ausgabe:
helo sync 10
helo async 10
over10
task 11
callback **11**
Welche OK ist: Stück Code nach await ausgeführt wird, in der gleiche Thread wie die Aufgabe selbst.
Nun, wenn ich es in einer WPF-Anwendung zu tun:
private void Button_Click_1(object sender, RoutedEventArgs e)
{
Console.WriteLine("helo sync " + Thread.CurrentThread.ManagedThreadId);
testc();
Console.WriteLine("over" + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(2000);
Console.ReadLine();
}
Es erzeugt folgende Ausgabe:
helo sync 8
helo async 8
over8
task 9
callback **8**
Wo wir Code sehen können, nachdem sie in dem UI-Thread ausgeführt abzuwarten. Nun, das ist großartig, weil es das Manipulieren beobachtbarer Sammlungen usw. ermöglicht. Aber ich habe mich gefragt, warum? "Wie könnte ich das Gleiche machen?" Handelt es sich um ein TaskScheduler-Verhalten? Ist das im .NET Framework fest programmiert?
Thx für jede Idee, die Sie einreichen können.
+1 braucht mehr Betonung auf Ihre BTW obwohl. – Phill