/go-await

async / await inspired in dotnet

Primary LanguageGo

go-await

Coverage

package main

import (
	"context"
	"log"
	"time"

	"github.com/arielsrv/go-await/async"
)

func main() {
	f := func() string {
		log.Println("Warming up ...")
		time.Sleep(3 * time.Second)
		log.Println("Done ...")
		return "Hello world!"
	}

	// Without context
	log.Println("Let's start ...")
	future := async.Run(func() any {
		return f()
	})
	log.Println("Running ...")
	value := future.Await()
	log.Println(value)

	// With context
	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	defer cancel()

	log.Println("Let's start ...")
	future = async.RunWithContext(ctx, func() any {
		return f()
	})
	log.Println("Running ...")
	value = future.AwaitWithContext(ctx)
	log.Println(value)
}