TryExecuteTaskInline の MSDN ドキュメントには、次のように記載されています。
TaskScheduler から派生したクラスは、この関数を実装して、そのタスク オブジェクトで待機を開始するスレッドでのタスクのインライン実行をサポートします。
ただし、ソースコードを見ると、の実装TaskScheduler.TryExecuteTaskInline
:
protected override bool TryExecuteTaskInline(Task task, bool taskWasPreviouslyQueued)
{
if (SynchronizationContext.Current == m_synchronizationContext)
{
return TryExecuteTask(task);
}
else
return false;
}
現在の同期コンテキストがインスタンス化中にキャプチャされたものと同じかどうかのみをチェックします (SynchronizationContextTaskScheduler
同じソース ファイルのコンストラクターを参照してください)。複数のスレッドが 1 つの同期コンテキストを共有できるため、必ずしも同じスレッドを意味するわけではありません。
したがって、ドキュメントの内容を実際に理解していないか、間違っているかのいずれかです。誰かがそれを説明できますか?
そのメソッドのドキュメントで要求されているように、この実装が「そのタスク オブジェクトで待機を開始するスレッドでのタスクのインライン実行をサポートする」方法がわかりません。タスクの ExecuteEntry を呼び出す TryExecuteTask を呼び出すだけです (メソッド名をクリックするだけで、そのソースにジャンプできます)。