Skip to content

OR channel using context #9

Open
@shiva0612

Description

@shiva0612
package main

import (
	"context"
	"fmt"
	"time"
)

var (
	sleep_time = []int{1, 2, 3, 4}
)

func main() {
	create_n_goroutines_wait_until_one_is_done_and_exit(4)
}

func create_n_goroutines_wait_until_one_is_done_and_exit(n int) {
	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()

	for i := 0; i < n; i++ {
		go work(i, cancel)
	}
	<-ctx.Done()
}

func work(i int, cancel context.CancelFunc) {
	defer cancel()
	time.Sleep(time.Duration(sleep_time[i]) * time.Second)
	fmt.Println("DONE by index: ", i)
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions