9.4.3.1 توضیحات #
الگو wait for task یکی از الگوهای رایج در زبان گو می باشد و انتظار برای تکمیل یک تسک یا فرآیند استفاده می شود. یک تسک با استفاده از گوروتین اجرا می شود و پس اتمامش کار تسک از طریق کانال سیگنال انجام می فرستد.
همچنین می توانید شما یک کانال ایجاد کنید منتظر بمانید تسک انجام شود و دیتا مورد نظر را از طریق کانال بگیرید.
9.4.3.2 دیاگرام #
9.4.3.3 نمونه کد #
1package main
2
3import "fmt"
4
5func main() {
6 done := make(chan bool)
7 go task(done)
8
9 <-done
10 fmt.Println("Task complete!")
11}
12
13func task(done chan bool) {
14 // Do some work here
15 fmt.Println("Working...")
16 done <- true
17}
در مثال فوق ما یک کانال ایجاد کردیم که پس انجام شدن تسک وضعیت کار انجام شده را بگیریم. حال کانال done را به تابع task پاس دادیم پس از انجام شدن کارش مقدار true را به کانال فرستادیم و سپس ما وضعیت انجام شدن تسک را دریافت می کنیم.
9.4.3.4 کاربردها #
- پرادزش حجم زیادی از داده ها بصورت موازی : میتوانید از این الگو برای اجرای چندین گوروتین که تکههایی از دادهها را به صورت موازی پردازش میکنند، استفاده کنید و سپس قبل از ادامه مرحله بعدی برنامهتان منتظر بمانید تا همه گوروتینها تمام شوند.
- ایجاد ریکوئست API چندگانه : میتوانید از این الگو برای برقراری همزمان چندین تماس API استفاده کنید و قبل از ادامه منتظر تمام پاسخها باشید.
- انتظار برای ورودی کاربر: میتوانید از الگو برای اجرای یک گوروتین استفاده کنید که منتظر ورودی کاربر است و هنگام دریافت ورودی، پیامی را در کانال «انجام شد» ارسال میکند. این می تواند مفید باشد اگر بخواهید در پس زمینه منتظر ورودی بمانید در حالی که سایر بخش های برنامه شما همچنان به کار خود ادامه می دهند.
- انتظار برای آماده شدن منابع: می توانید از الگوی استفاده کنید تا قبل از ادامه مرحله بعدی برنامه، منتظر آماده شدن منابعی مانند اتصال پایگاه داده یا فایل باشید.
- انتظار برای تکمیل یک کار پسزمینه: میتوانید از الگو برای اجرای یک کار در پسزمینه استفاده کنید و قبل از ادامه مرحله بعدی برنامه، منتظر تکمیل آن باشید.