Fiber

trait Fiber[F[_], A]

Fiber represents the (pure) result of a Concurrent data type (e.g. IO) being started concurrently and that can be either joined or canceled.

Fiber represents the (pure) result of a Concurrent data type (e.g. IO) being started concurrently and that can be either joined or canceled.

You can think of fibers as being lightweight threads, a fiber being a concurrency primitive for doing cooperative multi-tasking.

For example a Fiber value is the result of evaluating IO.start:

 val io = IO.shift *> IO(println("Hello!"))

 val fiber: IO[Fiber[IO, Unit]] = io.start

Usage example:

 for {
   fiber <- IO.shift *> launchMissiles.start
   _ <- runToBunker.handleErrorWith { error =>
     // Retreat failed, cancel launch (maybe we should
     // have retreated to our bunker before the launch?)
     fiber.cancel *> IO.raiseError(error)
   }
   aftermath <- fiber.join
 } yield {
   aftermath
 }
Companion
object
class Object
trait Matchable
class Any

Value members

Abstract methods

Triggers the cancellation of the fiber.

Triggers the cancellation of the fiber.

Returns a new task that will trigger the cancellation upon evaluation. Depending on the implementation, this task might await for all registered finalizers to finish, but this behavior is implementation dependent.

Note that if the background process that's evaluating the result of the underlying fiber is already complete, then there's nothing to cancel.

def join: F[A]

Returns a new task that will await for the completion of the underlying fiber, (asynchronously) blocking the current run-loop until that result is available.

Returns a new task that will await for the completion of the underlying fiber, (asynchronously) blocking the current run-loop until that result is available.