問題タブ [continuewith]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - スレッドセーフなタスク キューの待機
簡単なことをしたい(それContinueWith
がスレッドセーフであると仮定して):
問題: 上記のコードでは、すぐに戻り、内部タスクawait _task
があるかどうかを無視します。
複数回_task
延長できる要件を拡張していますが、それらすべてが終了するのをどのように待ちますか? ContinueWith
もちろん、私は古いスレッドセーフな方法でそれを試みることができます:
または、タスクをスレッドセーフ コレクションに格納し、Task.WaitAll
.
しかし、最初のスニペットを簡単に修正できるかどうか知りたいです。
c# - タスク継続の予期しない動作
次のコードを見てください。
そこで、現在のコンテキスト (WinForms スレッド) を取得し、そのコンテキストで新しいタスクを開始し、タスク スケジューラで同期継続をアタッチしDefault
ます。私が理解している限り、継続はスレッドプールスレッドで開始する必要があります。UI スレッドがスレッドプールに属していません。しかし、代わりに、継続を含むすべてのコードが同じスレッドで同期して実行されます。それは私にとってかなり予想外です。
ところで、継続オプションを に設定すると、必要にTaskContinuationOptions.None
応じて別のスレッドで実行されます。継続オプションはタスク スケジューラよりも優先されるようですが、それらは単なるヒントであり、スケジューラは必須です。
それはバグですか、それとも予想される動作ですか?
親タスクのコンテキストと継続オプションに関係なく、UI スレッドの外部で継続コードの実行を保証するにはどうすればよいですか? カスタムタスクスケジューラ?
注: これがレガシー コードであることはわかっており、async/await を使用することをお勧めします。