Agree with @nas it should be called `perform` or `run`. `start` makes it sound like it starts something asynchronous, while the method is synchronous (blocking).

The `ensure` is there because the method can be interrupted from another thread (by calling `stop` on the same object).

Will rename `start`.