def prepare(executor = @service.executor)
      @normal_future = initial_normal(executor, &@normal_block)
      @normal_future.add_observer do |_, value, reason|
        if reason # failure
          if @fallback_block
            future = RichFuture.new(executor: executor) do
              success, value, reason = Concurrent::SafeTaskExecutor.new(@fallback_block, rescue_exception: true).execute(reason)
              if success
                @ivar.set(value)
              else
                @ivar.fail(reason)
              end
            end
            future.safe_execute
          else
            @ivar.fail(reason)
          end
        else # success
          @ivar.set(value)
        end
      end

      @dependencies.each(&:start)
    end
def prepare(executor = @service.executor)
      @normal_future = initial_normal(executor, &@normal_block)
      @normal_future.add_observer do |_, value, reason|
        if reason # failure
          if @fallback_block
            future = RichFuture.new(executor: executor) do
              success, value, reason = Concurrent::SafeTaskExecutor.new(@fallback_block, rescue_exception: true).execute(reason)
              if success
                @ivar.set(value)
              else
                @ivar.fail(reason)
              end
            end
            future.safe_execute
          else
            @ivar.fail(reason)
          end
        else # success
          @ivar.set(value)
        end
      end

      @dependencies.each(&:start)
    end
set future
 set fallback future as an observer
 start dependencies