Effect.interrupt
特定のFiber (Effect)を明示的に中断できる
中断が発生すると、FiberのIDや開始時刻といった詳細情報がキャプチャされる
キャプチャ内容は、Effect.runPromiseExitなどを使えば確認できる
例
code:ts
import { Effect } from "effect"
const program = Effect.gen(function* () {
console.log("start")
yield* Effect.sleep("2 seconds")
yield* Effect.interrupt
console.log("done")
return "some result"
})
Effect.runPromiseExit(program).then(console.log)
そうですかmrsekut.icon
Effect.onInterrupt
Fiberが中断されたときに実行されるcleanup処理を書ける
例
Fiberが中断されたときにログを出力
code:ts
import { Console, Effect } from "effect"
const handler = Effect.onInterrupt((_fibers) =>
Console.log("Cleanup completed")
)
使用例
code:ts
const interruption = Console.log("Task interrupted").pipe(
Effect.andThen(Effect.interrupt),
handler
)
Effect.runFork(interruption)
code:result
Task interrupted
Cleanup completed
複数のEffectを並列に実行しているときは、1つが中断されると全てが中断される
Effect.forEachなど
https://effect.website/docs/concurrency/basic-concurrency/#interruption-of-concurrent-effects