なぜブロックされますか?私はDispatcher.PushFrame()で解決策を知っていますが、それでもなお解決策はあります。従来の「非同期コードでブロックしない」タイプの問題ですか?Dispatcher.Invokeをブロックするのはなぜですか?
class Program
{
static void Main(string[] args)
{
Test().Wait();
}
static async Task Test()
{
var disp = Dispatcher.CurrentDispatcher;
var t = Task.Run(() =>
{
disp.Invoke(() =>
{
Console.WriteLine("works");
});
});
await t.ConfigureAwait(false);
}
}
UPD:メインスレッドで同期して待機し、スレッドプールディスパッチャーとスティルブロックを使用します。
https://stackoverflow.com/questions/13140523/await-vs-task-wait-deadlock – Legends
'テスト())(WAIT;' 'await' –
しないブロックされている'待機ため() 'はバックグラウンドスレッド上で実行されるタスクを待たないので、' await 'が起こったとき、メインスレッドがブロックされ、すべてのスレッドがブロックされるようにする。 – John