33 lines
603 B
Go
33 lines
603 B
Go
|
package runtime
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
"sync"
|
||
|
)
|
||
|
|
||
|
var globalTaskMap sync.Map
|
||
|
|
||
|
// startTask adds the task to global map
|
||
|
func startTask(buildID int64, ctx context.Context) error {
|
||
|
_, exist := globalTaskMap.Load(buildID)
|
||
|
if exist {
|
||
|
return fmt.Errorf("task %d already exists", buildID)
|
||
|
}
|
||
|
|
||
|
task := NewTask(buildID)
|
||
|
|
||
|
// set task ve to global map
|
||
|
// when task is done or canceled, it will be removed from the map
|
||
|
globalTaskMap.Store(buildID, task)
|
||
|
|
||
|
go task.Run(ctx)
|
||
|
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
// finishTask removes the task from global map
|
||
|
func finishTask(buildID int64) {
|
||
|
globalTaskMap.Delete(buildID)
|
||
|
}
|