9.4.10 الگو Channel Cancellation

9.4.10 الگو Channel Cancellation

9.4.10.1 توضیحات #

از کانال ها برای ارتباط بین گوروتین ها و هماهنگ کردن اجرا استفاده می شود. حال گاهی اوقات نیاز است که ما یکسری فرآیند را داخل گوروتین لغو کنیم. در اینجا می توانیم با استفاده از کانال سیگنال لغو کردن بفرستید تا عملیات هایی که گوروتین مورد نظر انجام می داد لغو شود.

9.4.10.2 دیاگرام #

9.4.10.3 نمونه کد #

 1package main
 2
 3import (
 4	"fmt"
 5)
 6
 7func doWork(cancel chan bool) {
 8	fmt.Println("Working...")
 9	for {
10		select {
11		case <-cancel:
12			fmt.Println("Canceled")
13			return
14		default:
15		}
16	}
17}
18
19func main() {
20	cancel := make(chan bool)
21	go doWork(cancel)
22	// do some other work
23	fmt.Println("Canceling...")
24	cancel <- true
25}
1$ go run main.go
2Canceling...
3Working...
4Canceled

در مثال فوق ما یک کانال ایجاد کردیم برای لغو عملیات در حال اجرا در کانال. حال doWork را اجرا کردیم و سپس سیگنال لغو شدن ارسال کردیم داخل تابع doWork سیگنال را بواسطه select دریافت می کنیم و درخواست را لغو می کنیم.

9.4.10.4 کاربردها #