Dex.Scheduler.spawn

### Method

# Dex Schedulerspawn

#### Declaration [src]

    DexFuture*
    dex_scheduler_spawn (
      DexScheduler* scheduler,
      gsize stack_size,
      DexFiberFunc func,
      gpointer func_data,
      GDestroyNotify func_data_destroy
    )

#### Description [src]

Request `scheduler` to spawn a `DexFiber`.

The fiber will have its own stack and cooperatively schedules among other fibers sharing the scheduler.

This can be called from any thread. The resulting fiber runs on the thread associated with the `scheduler`.

If `stack_size` is 0, it will set to a sensible default. Otherwise, it is rounded up to the nearest page size.

    static DexFuture *
    fiber_func (gpointer data)
    {
      GInputStream *stream = data;
      GError *error = NULL;
      GBytes *bytes = NULL;

      if (!(bytes = dex_await_boxed (dex_input_stream_read_bytes (stream, 4096, 0), &error)))
        return dex_future_new_for_error (error);

      ...

      return dex_future_new_true ();
    }

    DexFuture *
    spawn_fiber (GInputStream *stream)
    {
      return dex_scheduler_spawn (NULL, 0, fiber_func,
                                  g_object_ref (stream),
                                  g_object_unref);
    }

#### Parameters

`scheduler`

  Type: `DexScheduler`

  A `DexScheduler`.

  The argument can be `NULL`.

`stack_size`

  Type: `gsize`

  Stack size in bytes or 0.

`func`

  Type: `DexFiberFunc`

  A `DexFiberFunc`.

`func_data`

  Type: `gpointer`

  Closure data for `func`.

  The argument can be `NULL`.
  The data is owned by the caller of the method.

`func_data_destroy`

  Type: `GDestroyNotify`

  Closure notify for `func_data`.

#### Return value

Type: `DexFuture`

A `DexFuture` that will resolve or reject when `func` completes (or its resulting `DexFuture` completes).

The caller of the method takes ownership of the returned data, and is responsible for freeing it.