私はまだタスクの概念全体と TPL を学んでいます。私の現在の理解では、SynchronizationContext 関数 (存在する場合) はawait
、Task を「どこかに」ディスパッチするために使用されます。一方、Task
クラス内の関数はコンテキストを使用しませんよね?
たとえばTask.Run(...)
、常にスレッド プールのワーカー スレッドでアクションをディスパッチし、SynchronizationContext.Current
完全に無視します。await Foobar()
コンテキストを使用して、await
?の後に生成されたタスクを実行します。
Task
それが本当なら、私の質問は次のとおりです。実際にアクションを実行するが、を使用してディスパッチされるを取得するにはどうすればよいSynchronizationContext.Current.Send/Post
ですか?
SynchronizationContext
そして、特にフレームワークの残りの部分でいつ、どのように使用されるかについて、誰でも良い導入を推奨できますか? MSDNはこのクラスについて非常に静かなようです。Google の上位ヒット (こことここ) は、Windows フォームのディスパッチのみに合わせて調整されているようです。Stephen Cleary は、どのコンテキストが既に存在し、どのように機能するかを学ぶのに役立つ記事を書きましたが、実際にいつどこで使用されるかについては理解していません。