真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

golang使用context關(guān)閉goroutine的方法

本篇內(nèi)容主要講解“golang使用context關(guān)閉go routine的方法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“golang使用context關(guān)閉go routine的方法”吧!

成都創(chuàng)新互聯(lián)公司主營錫林郭勒盟網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都APP應(yīng)用開發(fā),錫林郭勒盟h5重慶小程序開發(fā)搭建,錫林郭勒盟網(wǎng)站營銷推廣歡迎錫林郭勒盟等地區(qū)企業(yè)咨詢

go中的context

go語言提供了context包,支持在多個go routine之間傳遞信號,可以使用它優(yōu)雅的取消任務(wù),從而優(yōu)雅的結(jié)束go routine,節(jié)約系統(tǒng)資源。

實踐

今天遇到了這個任務(wù),有多科考試,需要比對一下各個學(xué)科的考試學(xué)生名單是否一致,考慮到假如有好幾科,然后每科有幾千個學(xué)生,如果只用循環(huán)那么需要循環(huán)幾萬次,于是就開了協(xié)程結(jié)合context進(jìn)行處理。話不多說,直接上代碼:

    var baseStus []examstudent.StudentViewModel
	linq.From(stuMap[int(sexams[0].SeID)]).OrderBy(func(i interface{}) interface{} {
		return i.(examstudent.StudentViewModel).ExamCode
	}).ToSlice(&baseStus)
    //定義一個支持取消的context
	ctx, cancel := context.WithCancel(context.Background())
    //標(biāo)志,用來區(qū)分是一致還是不一致
	sch := make(chan int, len(sexams)-1)
	for i, _ := range sexams {
		if i == 0 {
			continue
		}
        //開啟協(xié)程
		go func(c context.Context, index int) {
			var compareStus []examstudent.StudentViewModel
			linq.From(stuMap[int(sexams[i].SeID)]).OrderBy(func(x interface{}) interface{} {
				return x.(examstudent.StudentViewModel).ExamCode
			}).ToSlice(&compareStus)
			for x, vv := range baseStus {
				select {
				case <-c.Done():
					return
				default:
					if vv.ExamCode != compareStus[x].ExamCode {
						cancel() //如果不一致就取消任務(wù)
						return
					}
				}
			}
			sch <- index
		}(ctx, i)

	}
	defer cancel()
	defer close(sch)
	for {
		select {//select語句
		case <-ctx.Done():
			return false, nil  //執(zhí)行了這個地方就表示不一致了
		case <-sch:
			if len(sch) == 0 {
				return true, nil
			}
		}
	}

到此,相信大家對“golang使用context關(guān)閉go routine的方法”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


新聞名稱:golang使用context關(guān)閉goroutine的方法
URL標(biāo)題:http://weahome.cn/article/gejspi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部