9.4.1.1 توضیحات #
با استفاده از الگو Wait For Result می توانید یک عملیاتی را بصورت همزمانی انجام دهید و سپس منتظر نتیجه عملیات صورت گرفته بمانید. برای اینکار از کانال استفاده می شود.
9.4.1.2 دیاگرام #
9.4.1.3 نمونه کد #
1package main
2
3import (
4 "fmt"
5 "time"
6)
7
8func longRunningTask(c chan int) {
9 time.Sleep(3 * time.Second)
10 c <- 42
11}
12
13func main() {
14 c := make(chan int)
15 go longRunningTask(c)
16
17 result := <-c
18 fmt.Println("Result:", result)
19}
در کد فوق ما یک تابع به نام longRunningTask داریم که قرار است بصورت همزمان اجرا شود در اینجا ما یک کانال را برای دریافت نتیجه از تابع ارسال می کنیم و منتظر پاسخ از طریق کانال می شویم.
9.4.1.4 کاربردها #
- Web scraping : زمانی که شما عملیات web scraping انجام می دهید نیاز دارید بصورت همزمان از چندین آدرس داده جمع آوری کنید در اینجا شما می توانید بصورت همزمان به چندین آدرس درخواست دهید و سپس منتظر نتایج بمانید.
- API Calls : در معماری ماکروسرویس شما نیازی دارید چندین API را همزمان فراخوانی کنید و منتظر نتایج بمانید قبل از اینکه به کلاینت نتیجه نهایی را نمایش دهید. حال در اینجا می توانید از این الگو استفاده کنید و همزمان اینکار را انجام دهید و منتظر نتایج بمانید تا زمان کمتری صرف شود.
- Parallel Computation : برای محاسبات علمی شما احتیاج دارید بصورت همزمان محاسبات انجام دهید و قبل از اینکه بخواهید به مرحله بعدی فرآیند بروید می توانید برای نتایجی بصورت همزمان ایجاد کردید منتظر بمانید.