루프, forEach와 유사한 메서드, 취소 확인이 누락된 ContainerUtil.process()를 보고합니다.

com.intellij.util.concurrency.annotations.RequiresReadLock 어노테이션이 있는 메서드 내에서만 실행됩니다.

예:


@RequiresReadLock
fun doSomething() {
  ...
  for (item in items) {
        ProgressManager.checkCanceled() // 첫 번째 줄에 있어야 합니다
    ...
  }

  items.forEach {
    ProgressManager.checkCanceled() // 첫 번째 줄에 있어야 합니다
    ...
  }
  ...
}

사이에 아무것도 없는 중첩 루프의 경우:


@RequiresReadLock
fun doSomething() {
  ...
  for (item in items) {
        // nothing in between
        for (inner in item.inners) {
            ProgressManager.checkCanceled() // 내부 루프 안의 첫 번째 줄에만 있어야 합니다
      ...
    }
  }
  ...
}

블로킹 컨텍스트에서는 com.intellij.openapi.progress.ProgressManager.checkCanceled()가 사용되어야 하며 일시 중지 컨텍스트에서는 com.intellij.openapi.progress.CoroutinesKt.checkCancelled()가 사용되어야 합니다.

상세한 정보는 IntelliJ Platform Plugin SDK 문서의 백그라운드 프로세스 취소를 참조하세요.

2023.1의 새로운 기능