* Starts fn(args) in a new logical thread. * * Executes the supplied function in a new logical thread represented by * Tid. The calling thread is designated as the owner of the new thread. * When the owner thread terminates an OwnerTerminated message will be * sent to the new thread, causing an OwnerTerminated exception to be * thrown on receive(). * * Params: * fn = The function to execute. * args = Arguments to the function. * * Returns: * A Tid representing the new logical thread. * * Notes: * args must not have unshared aliasing. In other words, all arguments * to fn must either be shared or immutable or have no * pointer indirection. This is necessary for enforcing isolation among * threads. * * Similarly, if fn is a delegate, it must not have unshared aliases, meaning * fn must be either shared or immutable.

F fn
if (
isSpawnable!(F, T)


static void f(string msg)
    assert(msg == "Hello World");

auto tid = spawn(&f, "Hello World");

Fails: char[] has mutable aliasing.

string msg = "Hello, World!";

static void f1(string msg) {}
static assert(!__traits(compiles, spawn(&f1, msg.dup)));
static assert( __traits(compiles, spawn(&f1, msg.idup)));

static void f2(char[] msg) {}
static assert(!__traits(compiles, spawn(&f2, msg.dup)));
static assert(!__traits(compiles, spawn(&f2, msg.idup)));

New thread with anonymous function

    ownerTid.send("This is so great!");
assert(receiveOnly!string == "This is so great!");