# 14-cancel-task

태스크가 fork되었다면, `yield cancel(task)`를 사용하여 취소 가능.

이 과정이 동작하는 방식을 살펴보자. UI 명령으로 백그라운드 싱크를 시작/중지하는 예제임.

```javascript
import { take, put, call, fork, cancel, cancelled } from 'redux-saga/effects'
import { delay } from 'redux-saga'
import { someApi, actions } from 'somewhere'

function* bgSync() {
  try {
    while (true) {
      yield put(actions.requestStart())
      const result = yield call(someApi)
      yield put(actions.requestSuccess(result))
      yield call(delay, 5000)
    }
  } finally {
    if (yield cancelled())
      yield put(actions.requestFailure('Sync cancelled!'))
  }
}

function* main() {
  while ( yield take(START_BACKGROUND_SYNC) ) {
    // starts the task in the background
    const bgSyncTask = yield fork(bgSync)

    // wait for the user stop action
    yield take(STOP_BACKGROUND_SYNC)
    // user clicked stop. cancel the background task
    // this will cause the forked bgSync task to jump into its finally block
    yield cancel(bgSyncTask)
  }
}
```

* bgSyncTask의 취소는 finally 구간으로 점프시킴.
* 여기서 `yield cancelled()` : 취소 여부 확인

실행중인 태스크 취소시, 순간 block된 태스크가 있는 현재 이펙트 또한 취소됨.

* block된 1번 call이 다른 call(2번) effect를 수행할 경우, 1번 call을 cancel하면 하위 (2번) call도 취소

## fork effect로 제너레이터 테스트하기

테스트할 때 createMockTask를 사용해야함. 이 함수가 반환하는 객체는 fork 테스트 후에 next의 인자로 주어져야함. mock task가 cancel로 이어질 수 있음.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://hoilzz-til.gitbook.io/docs/frontend/react/library/redux-saga/14-cancel-task.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
