# start method

1. @override

FutureOr<void> start()
override

A common interface defining methods for start/stop lifecycle control.

The typical use case for this is to control asynchronous processing. This interface does not imply specific auto-startup semantics.

## Usage Example

    class BackgroundTaskManager implements Lifecycle {
      bool _running = false;

      @override
      void start() {
        if (!_running) {
          startBackgroundTasks();
          _running = true;
        }
      }

      @override
      void stop() {
        if (_running) {
          stopBackgroundTasks();
          _running = false;
        }
      }

      @override
      bool isRunning() => _running;
    }

Start this component.

Should not throw an exception if the component is already running.

## Implementation

    @override
    FutureOr<void> start() {
      return synchronized(_lock, () async {
        if (!_isRunning) {
          _isRunning = true;
          await publishEvent(ContextStartedEvent.withClock(this, () => getStartTime()));

          await doStart();
        }
      });
    }