TaskScheduler.TryExecuteTaskInline(Task, Boolean) メソッド


指定された Task をこの呼び出しで同期的に実行できるかどうかを判断し、できる場合は実行します。Determines whether the provided Task can be executed synchronously in this call, and if it can, executes it.

 abstract bool TryExecuteTaskInline(System::Threading::Tasks::Task ^ task, bool taskWasPreviouslyQueued);
protected abstract bool TryExecuteTaskInline (System.Threading.Tasks.Task task, bool taskWasPreviouslyQueued);
protected abstract bool TryExecuteTaskInline (System.Threading.Tasks.Task task, bool taskWasPreviouslyQueued);
abstract member TryExecuteTaskInline : System.Threading.Tasks.Task * bool -> bool



実行対象の TaskThe Task to be executed.


タスクが以前キューに追加されていたかどうかを示すブール値。A Boolean denoting whether or not task has previously been queued. このパラメーターを True に設定すると、タスクが以前キューに追加されていた (スケジュールされていた) 可能性があることを示します。False に設定すると、タスクがキューに追加されていないことを示し、この呼び出しによって、タスクがキューに追加されずにインラインで実行されます。If this parameter is True, then the task may have been previously queued (scheduled); if False, then the task is known not to have been queued, and this call is being made in order to execute the task inline without queuing it.


タスクがインラインで実行されたかどうかを示すブール値。A Boolean value indicating whether the task was executed inline.



task 引数が null です。The task argument is null.

task は既に実行されました。The task was already executed.


TaskScheduler から派生したクラスは、この関数を実装して、そのタスクオブジェクトで待機を開始するスレッド上でのタスクのインライン実行をサポートします。A class derived from TaskScheduler implements this function to support inline execution of a task on a thread that initiates a wait on that task object. インライン実行は省略可能であり、false を返すことによって要求が拒否される場合があります。Inline execution is optional, and the request may be rejected by returning false. ただし、インライン化できるタスクが多いほど、スケジューラがより適切に拡張されます。However, the more tasks that can be inlined, the better the scheduler will scale. 実際、スケジューラが少なすぎると、デッドロックが発生する可能性があります。In fact, a scheduler that inlines too little may be prone to deadlocks. 適切な実装では、スケジューラによって保証されるポリシーで実行されている要求が正常にインラインで実行できることを確認する必要があります。A proper implementation should ensure that a request executing under the policies guaranteed by the scheduler can successfully inline. たとえば、スケジューラが専用のスレッドを使用してタスクを実行する場合、そのスレッドからのインライン展開要求は成功します。For example, if a scheduler uses a dedicated thread to execute tasks, any inlining requests from that thread should succeed.

スケジューラがインライン実行を決定した場合は、指定されたタスクオブジェクトを使用して base TaskScheduler の TryExecuteTask メソッドを呼び出し、戻り値を反映することによって、この処理を実行する必要があります。If a scheduler decides to perform the inline execution, it should do so by calling to the base TaskScheduler's TryExecuteTask method with the provided task object, propagating the return value. また、インライン展開要求を受け入れる場合に、スケジューラが内部データ構造からインラインタスクを削除することが適切な場合もあります。It may also be appropriate for the scheduler to remove an inlined task from its internal data structures if it decides to honor the inlining request. ただし、状況によっては、スケジューラが QueueTask メソッドを使用して以前に提供されていなかったタスクをインライン化するように求められることがあります。Note, however, that under some circumstances a scheduler may be asked to inline a task that was not previously provided to it with the QueueTask method.

派生スケジューラは、呼び出し元のスレッドが、特定のタスクの実行に適しているかどうかを確認する役割を担います。これは、独自のスケジュール設定と実行ポリシーに関係します。The derived scheduler is responsible for making sure that the calling thread is suitable for executing the given task as far as its own scheduling and execution policies are concerned.

詳細については、「 TaskScheduler」を参照してください。For more information, see TaskScheduler.