Run control tasks asynchronously using TPL
First, some notes about your code:


Using Tasks that are first created and later started usually doesn't make much sense. To represent some work to be done, just use a delegate.
Tasks almost never need to be Disposed.


Now, I think that what you want to do would be easiest to achieve using ActionBlock from TPL Dataflow. When you want to perform the operation, you would send a message to the block and the action in the block would execute it. ActionBlock already performs all synchronization necessary to make sure only one operation executes at a time.

ActionBlock&lt;bool&gt; _changeControlBlock = new ActionBlock&lt;bool&gt;(ChangeControl);

private void ChangeControl(bool on)
{
    if (on)
    {
        // turn on
    }
    else
    {
        // turn off
    }
}

public void TurnOn()
{
    _changeControlBlock.Post(true);
}

public void TurnOn()
{
    _changeControlBlock.Post(false);
}