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.

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;
      g_autoptr(GError) error = NULL;
      g_autoptr(GBytes) bytes = NULL;

      if (!(bytes = dex_await_boxed (dex_input_stream_read_bytes (stream, 4096, 0), &error)))
        return dex_future_new_for_error (g_steal_pointer (&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.