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}
در مثال فوق ما یک کانال ایجاد کردیم برای لغو عملیات در حال اجرا در کانال. حال doWork را اجرا کردیم و سپس سیگنال لغو شدن ارسال کردیم داخل تابع doWork سیگنال را بواسطه select دریافت می کنیم و درخواست را لغو می کنیم.