一連の操作を次々と実行します。
基本的な構造は
フォームのメソッド > を使用してRun()
呼び出すManager.DoStuff()
await Manager.DoStuff();
Manager.DoStuff()
はasync Task ...
したがって、UI スレッドをブロックすることは決して期待できません。ほとんどの場合はそうではありません。DoStuff
メソッドには次のようなものが含まれています。
var someTask = Something.BigTask();
var someTask2 = Something2.BigTask();
var someTask3 = Something3.BigTask();
await Task.WhenAll(someTask, someTask2, someTask3)
そしていくつかの個々のもの、例えば:
await SomethingElse.BigTask();
しかし、特定のスレッドに到達すると、UI スレッドが停止し、最終的にメッセージをポンピングしていないという例外が発生します。
方法は同じです。async Task SomeMethod()
私が考えることができる唯一のことはInvoke
、フォームで使用して多くのメッセージを記録することです。これは影響しますか?もしそうなら、それが壊れないようにする方法を見つける必要があります。
おそらくawait
、UI スレッドから非同期タスクを実行している場合、その非同期タスク内で UI スレッドをブロックするものは何もないはずです。
await
コードがなくなるまでの最上位レベルの呼び出しの後、最初の Run() メソッドは単純に終了します。それが実行する必要がある最後のタスクだからです。
何か案は?