<Type Name="FiberTaskScheduler" FullName="SpicyPixel.Threading.Tasks.FiberTaskScheduler">
  <TypeSignature Language="C#" Value="public sealed class FiberTaskScheduler : System.Threading.Tasks.TaskScheduler, IDisposable" />
  <TypeSignature Language="ILAsm" Value=".class public auto ansi sealed beforefieldinit FiberTaskScheduler extends System.Threading.Tasks.TaskScheduler implements class System.IDisposable" />
  <AssemblyInfo>
    <AssemblyName>SpicyPixel.Threading</AssemblyName>
    <AssemblyVersion>1.0.5.34676</AssemblyVersion>
  </AssemblyInfo>
  <Base>
    <BaseTypeName>System.Threading.Tasks.TaskScheduler</BaseTypeName>
  </Base>
  <Interfaces>
    <Interface>
      <InterfaceName>System.IDisposable</InterfaceName>
    </Interface>
  </Interfaces>
  <Docs>
    <summary>
      <see cref="T:System.Threading.Tasks.TaskScheduler" /> that can execute fibers (yieldable coroutines).
            Regular non-blocking tasks can also be scheduled on a <see cref="T:SpicyPixel.Threading.Tasks.FiberTaskScheduler" />,
            but <see cref="T:SpicyPixel.Threading.Tasks.YieldableTask" /> have the distinct ability to yield execution.
            </summary>
    <remarks>To be added.</remarks>
  </Docs>
  <Members>
    <Member MemberName=".ctor">
      <MemberSignature Language="C#" Value="public FiberTaskScheduler ();" />
      <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
      <MemberType>Constructor</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <Parameters />
      <Docs>
        <summary>
            Initializes a new instance of the <see cref="T:SpicyPixel.Threading.Tasks.FiberTaskScheduler" /> class.
            </summary>
        <remarks>
            Derived classes should invoke EnableQueueTask() in their constructor when ready to begin executing
            tasks.
            </remarks>
      </Docs>
    </Member>
    <Member MemberName=".ctor">
      <MemberSignature Language="C#" Value="public FiberTaskScheduler (SpicyPixel.Threading.FiberScheduler scheduler);" />
      <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor(class SpicyPixel.Threading.FiberScheduler scheduler) cil managed" />
      <MemberType>Constructor</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <Parameters>
        <Parameter Name="scheduler" Type="SpicyPixel.Threading.FiberScheduler" />
      </Parameters>
      <Docs>
        <param name="scheduler">To be added.</param>
        <summary>
            Initializes a new instance of the <see cref="T:SpicyPixel.Threading.Tasks.FiberTaskScheduler" /> class.
            </summary>
        <remarks>
            Derived classes should invoke EnableQueueTask() in their constructor when ready to begin executing
            tasks.
            </remarks>
      </Docs>
    </Member>
    <Member MemberName="CancellationToken">
      <MemberSignature Language="C#" Value="public System.Threading.CancellationToken CancellationToken { get; }" />
      <MemberSignature Language="ILAsm" Value=".property instance valuetype System.Threading.CancellationToken CancellationToken" />
      <MemberType>Property</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Threading.CancellationToken</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>
            Gets the cancellation token set when the scheduler is destroyed.
            </summary>
        <value>
            The cancellation token.
            </value>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="Dispose">
      <MemberSignature Language="C#" Value="public void Dispose ();" />
      <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance void Dispose() cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Void</ReturnType>
      </ReturnValue>
      <Parameters />
      <Docs>
        <summary>
            Releases all resource used by the <see cref="T:SpicyPixel.Threading.Tasks.FiberTaskScheduler" /> object.
            </summary>
        <remarks>
            Call the method when you are finished using the
            <see cref="T:SpicyPixel.Threading.Tasks.FiberTaskScheduler" />. The method leaves the
            <see cref="T:SpicyPixel.Threading.Tasks.FiberTaskScheduler" /> in an unusable state. After calling
            the method, you must release all references to the
            <see cref="T:SpicyPixel.Threading.Tasks.FiberTaskScheduler" /> so the garbage collector can reclaim the memory that
            the <see cref="T:SpicyPixel.Threading.Tasks.FiberTaskScheduler" /> was occupying.
            </remarks>
      </Docs>
    </Member>
    <Member MemberName="FiberScheduler">
      <MemberSignature Language="C#" Value="public SpicyPixel.Threading.FiberScheduler FiberScheduler { get; }" />
      <MemberSignature Language="ILAsm" Value=".property instance class SpicyPixel.Threading.FiberScheduler FiberScheduler" />
      <MemberType>Property</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>SpicyPixel.Threading.FiberScheduler</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>
            Gets the fiber scheduler associated with this task scheduler.
            </summary>
        <value>
            The fiber scheduler.
            </value>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="Finalize">
      <MemberSignature Language="C#" Value="~FiberTaskScheduler ();" />
      <MemberSignature Language="ILAsm" Value=".method familyhidebysig virtual instance void Finalize() cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Void</ReturnType>
      </ReturnValue>
      <Parameters />
      <Docs>
        <summary>
            Releases unmanaged resources and performs other cleanup operations before the
            <see cref="T:SpicyPixel.Threading.Tasks.FiberTaskScheduler" /> is reclaimed by garbage collection.
            </summary>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="GetScheduledTasks">
      <MemberSignature Language="C#" Value="protected override System.Collections.Generic.IEnumerable&lt;System.Threading.Tasks.Task&gt; GetScheduledTasks ();" />
      <MemberSignature Language="ILAsm" Value=".method familyhidebysig virtual instance class System.Collections.Generic.IEnumerable`1&lt;class System.Threading.Tasks.Task&gt; GetScheduledTasks() cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Collections.Generic.IEnumerable&lt;System.Threading.Tasks.Task&gt;</ReturnType>
      </ReturnValue>
      <Parameters />
      <Docs>
        <summary>
            For debugger support only, generates an enumerable of Task instances 
            currently queued to the scheduler waiting to be executed.
            </summary>
        <returns>
            The scheduled tasks.
            </returns>
        <remarks>
            This is not supported and will always return null.
            </remarks>
      </Docs>
    </Member>
    <Member MemberName="QueueTask">
      <MemberSignature Language="C#" Value="protected override void QueueTask (System.Threading.Tasks.Task task);" />
      <MemberSignature Language="ILAsm" Value=".method familyorassemblyhidebysig virtual instance void QueueTask(class System.Threading.Tasks.Task task) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Void</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="task" Type="System.Threading.Tasks.Task" />
      </Parameters>
      <Docs>
        <param name="task">
            The non-blocking task to queue.
            </param>
        <summary>
            Queues a non-blocking task.
            </summary>
        <remarks>
            If the task is queued from the scheduler thread it will begin executing to its
            first yield immediately.
            </remarks>
      </Docs>
    </Member>
    <Member MemberName="TryDequeue">
      <MemberSignature Language="C#" Value="protected override bool TryDequeue (System.Threading.Tasks.Task task);" />
      <MemberSignature Language="ILAsm" Value=".method familyorassemblyhidebysig virtual instance bool TryDequeue(class System.Threading.Tasks.Task task) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Boolean</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="task" Type="System.Threading.Tasks.Task" />
      </Parameters>
      <Docs>
        <param name="task">
            The task to dequeue.
            </param>
        <summary>
            Tries to dequeue a task.
            </summary>
        <returns>
            Returns <c>true</c> if the task was dequeued, <c>false</c> otherwise.
            </returns>
        <remarks>
            Only delay start tasks can be dequeued. Although the Fiber scheduler does
            delay start tasks queued from a non-scheduler thread, de-queuing is not
            supported right now and so this method always returns <c>false</c>.
            </remarks>
      </Docs>
    </Member>
    <Member MemberName="TryExecuteTaskInline">
      <MemberSignature Language="C#" Value="protected override bool TryExecuteTaskInline (System.Threading.Tasks.Task task, bool taskWasPreviouslyQueued);" />
      <MemberSignature Language="ILAsm" Value=".method familyhidebysig virtual instance bool TryExecuteTaskInline(class System.Threading.Tasks.Task task, bool taskWasPreviouslyQueued) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Boolean</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="task" Type="System.Threading.Tasks.Task" />
        <Parameter Name="taskWasPreviouslyQueued" Type="System.Boolean" />
      </Parameters>
      <Docs>
        <param name="task">
            The task to execute.
            </param>
        <param name="taskWasPreviouslyQueued">
            Set to <c>true</c> if the task was previously queued, <c>false</c> otherwise.
            </param>
        <summary>
            Tries to execute the task inline.
            </summary>
        <returns>
            Returns <c>true</c> if the task was executed inline, <c>false</c> otherwise.
            </returns>
        <remarks>
          <para>
            Tasks executed on a fiber scheduler have thread affinity and must run on
            the thread the scheduler was created online. Inline execution will therefore
            fail if attempted from another thread besides the scheduler thread.
            </para>
          <para>
            A <see cref="T:SpicyPixel.Threading.Tasks.YieldableTask" /> cannot run inline because yieldable tasks
            can only be processed by a <see cref="T:SpicyPixel.Threading.Tasks.FiberTaskScheduler" /> when queued.
            </para>
          <para>
            Because of these restrictions, only standard non-blocking actions invoked 
            on the scheduler thread are eligible for inlining.
            </para>
        </remarks>
      </Docs>
    </Member>
  </Members>
</Type>
