中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

golang異步任務隊列怎么實現

小億
126
2023-10-26 19:49:05
欄目: 編程語言

在Go語言中,可以使用goroutine和channel來實現異步任務隊列。下面是一個簡單的示例代碼:

package main

import (
	"fmt"
	"sync"
	"time"
)

func main() {
	// 創建一個無緩沖的channel,用于任務隊列
	taskQueue := make(chan func())
	// 使用sync.WaitGroup來等待所有任務完成
	var wg sync.WaitGroup

	// 啟動消費者goroutine,不斷從任務隊列中取出任務并執行
	go func() {
		for task := range taskQueue {
			task()
			wg.Done()
		}
	}()

	// 添加一些任務到任務隊列
	for i := 0; i < 10; i++ {
		// 增加等待的任務數量
		wg.Add(1)
		// 創建一個任務,并將其添加到任務隊列
		task := func() {
			fmt.Println("執行任務", i)
			time.Sleep(1 * time.Second) // 模擬任務執行時間
		}
		taskQueue <- task
	}

	// 等待所有任務完成
	wg.Wait()
	// 關閉任務隊列
	close(taskQueue)

	fmt.Println("所有任務已完成")
}

在上面的示例代碼中,我們創建了一個無緩沖的channel taskQueue 作為任務隊列,通過 taskQueue <- task 將任務添加到隊列中。然后,我們啟動一個消費者goroutine來不斷從任務隊列中取出任務并執行,直到任務隊列被關閉。

通過使用sync.WaitGroup來等待所有任務完成,我們可以確保在所有任務執行完之前,程序不會退出。當所有任務都完成后,我們關閉任務隊列并結束程序。

這樣,我們就實現了一個簡單的異步任務隊列。

0
永仁县| 泰州市| 历史| 太谷县| 陵水| 钟祥市| 长乐市| 牙克石市| 年辖:市辖区| 绥滨县| 广汉市| 永和县| 武山县| 福州市| 交口县| 滨州市| 郯城县| 青神县| 射洪县| 竹北市| 英超| 宁夏| 南靖县| 临安市| 阿拉善左旗| 鄂托克前旗| 黑河市| 广宗县| 施甸县| 苍山县| 府谷县| 渑池县| 宁陕县| 苏尼特右旗| 班戈县| 宁化县| 噶尔县| 阿尔山市| 卢氏县| 巴塘县| 凤山市|