で実行されている理由:非同期コールバックは、コードのこの部分についてはWPFのUIスレッド
は、次の出力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();
}
私が手:
helo sync 10
helo async 10
over10
task 11
callback **11**
OKです:のawait後のコードの一部がで実行されますタスク自体と同じスレッド。今
、私はWPFアプリケーションでそれを行う場合:私たちはUIスレッドで実行待った後、コードを見ることができ
helo sync 8
helo async 8
over8
task 9
callback **8**
:
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();
}
それが出力を次生成します。それは観測可能なコレクションなどを操作することができるので、これは素晴らしいことです。しかし、私は "なぜ?" "どうすれば同じことができますか?"これはTaskSchedulerの動作に関連していますか?これは.NET Frameworkでハードコードされていますか?
Thxあなたが提出できるアイデアは、
+1あなたのBTWに重点を置く必要があります。この完全な答えは – Phill