title: Saga canceling debounced action
body: <p>Dispatching a StopAction doesn't cancel the task. The <strong>successAction</strong> or <strong>errorAction</strong> are still getting dispatched even if a StopAction was called.</p>
  <pre><code>function* myTask(actionCreator, action) {
      try {
          const { cancelTask, response } = yield race({
              response: call(apiPromise, action.meta.id),
              cancelTask: take(StopAction.type)
          });
          if (cancelTask !== undefined) {
              return;
          }
          yield put(actionCreator.makeSuccessAction(response, action.meta));
      } catch (e) {
          yield put(actionCreator.makeErrorAction(e, action.meta));
      }
  }
  
  function* mySaga() {
      yield debounceFor(
          myActionCreator.loadAction.type,
          myTask,
          250,
          myActionCreator
      );
  }
  
  export function* debounceFor(pattern, saga, ms, ...args) {
      function* delayedSaga(action) {
          yield call(delay, ms);
          yield call(saga, ...args, action);
      }
  
      let task;
      while (true) {
          const action = yield take(pattern);
          if (task) {
              yield cancel(task);
          }
  
          task = yield fork(delayedSaga, action);
      }
  }
  </code></pre>