Cancel requests that this goroutine stop by cancelling the associated context
object. This function is threadsafe and idempotent. Note that this function
_requests_ termination, it does not forcefully kill the goroutine.
Done exposes a channel that allows outside goroutines to block on this
goroutine's completion. Whatever time passes between a call to Cancel() and
the Done() channel closing is the time taken by the goroutine to shut itself
down.
Error observes the error returned by the func passed to Go (if any). There is
nevery any error (i.e. this function returns nil) while the goroutine is
running.