私は現在、全体でTAPを使用する大部分が非同期のアプリケーションに取り組んでいます。Task
sを生成するためのメソッドを持つすべてのクラスには、sがTaskScheduler
注入されています。これにより、タスクの明示的なスケジューリングを実行できます。これは、私が理解しているように、MicrosoftがAsyncCTPを使用する方法ではありません。
新しいアプローチ(暗黙的なスケジューリング)で私が抱えている唯一の問題は、以前の哲学は常に「継続によって常にタスクスケジューラが指定されることを知っているので、タスクを完了するコンテキストについて心配する必要がない」ということです。 。
微妙なスレッドエラーを回避するという点で非常にうまく機能しているという理由だけで、それから離れることは少し心配です。コードのすべてのビットについて、コーダーが自分がどのスレッドを使用しているかを考慮することを覚えていることがわかります。彼らがタスクスケジューラを指定しなかった場合、それはバグです。
質問1:暗黙のアプローチが良い考えであることを誰かが私に安心させることができますか?ConfigureAwait(false)と、レガシー/サードパーティのコードでの明示的なスケジューリングによって、非常に多くの問題が発生しているのがわかります。たとえば、「await-ridden」コードが常にUIスレッドで実行されていることを確認するにはどうすればよいですか?
質問2:では、コードからすべてのDIを削除し、暗黙的なスケジューリングの使用を開始すると仮定するTaskScheduler
と、デフォルトのタスクスケジューラをどのように設定しますか?メソッドの途中で、高価なメソッドを待つ直前にスケジューラーを変更し、その後再び設定するのはどうですか?
(ps私はすでにhttp://msmvps.com/blogs/jon_skeet/archive/2010/11/02/configuring-waiting.aspxを読んでいます)