second pass refinements
    -- move task out of init and into launch method
    -- set in custom run loop mode
    -- set lock during error creation
    -- remove unnecessary NSRecursiveLock
    -- locked cancel method