报告缺少取消检查的循环、类似 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) {
        // 之间没有任何内容
        for (inner in item.inners) {
            ProgressManager.checkCanceled() // 应仅出现在内部循环的第一行中
      ...
    }
  }
  ...
}

在阻塞上下文中应使用 com.intellij.openapi.progress.ProgressManager.checkCanceled(),而在挂起上下文中应使用 com.intellij.openapi.progress.CoroutinesKt.checkCancelled()

如需了解详情,请参阅 IntelliJ 平台插件 SDK 文档中的后台进程取消

2023.1 最新变化