Effect.interrupt
中断が発生すると、FiberのIDや開始時刻といった詳細情報がキャプチャされる
例
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
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つが中断されると全てが中断される