I would add the `throw`/`catch` to ensure nothing happens after `#suspend` method is called. A block passed to `#suspend`should be executed before stack is unwounded to allow
```ruby
def run
  suspend { |suspended_action| PollingService.wait_for_task(suspended_action, input[:external_task_id]) }
end
```