-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathrejected.go
More file actions
51 lines (46 loc) · 1.51 KB
/
rejected.go
File metadata and controls
51 lines (46 loc) · 1.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package executor
// RejectedHandler 拒绝策略处理器 参数是任务(TaskFuture)、协程池
type RejectedHandler func(Runnable, Executor) error
// AbortPolicy 放弃任务执行,直接返回错误信息,默认的拒绝策略
var AbortPolicy RejectedHandler = func(runnable Runnable, executor Executor) error {
return ErrTaskQueueFull
}
// BlockPolicy 阻塞拒绝处理器,阻塞调用方直到任务队列有空余
var BlockPolicy RejectedHandler = func(runnable Runnable, executor Executor) (err error) {
g := executor.(*GoroutinePoolExecutor)
g.readLockOperate(func() {
err = g.runStateCheck()
})
if err == nil {
err = g.addRunnableTask(runnable, maxTimeDuration)
}
return
}
// CallerRunsPolicy 用当前提交的协程去进行执行
var CallerRunsPolicy RejectedHandler = func(runnable Runnable, executor Executor) (err error) {
g := executor.(*GoroutinePoolExecutor)
g.readLockOperate(func() {
err = g.runStateCheck()
})
if err == nil {
runnable.Run()
}
return
}
// DiscardOldestPolicy 丢弃最老的任务
var DiscardOldestPolicy RejectedHandler = func(runnable Runnable, executor Executor) (err error) {
g := executor.(*GoroutinePoolExecutor)
g.writeLockOperate(func() {
g.runStateCheck()
r, _ := g.removeRunnableTask(0)
//取消任务
cancel := r.(*TaskFuture).Cancel()
if cancel {
//执行TaskFuture的run方法,跑完流程唤醒回调(实际任务已被取消不会再被执行)
r.Run()
}
//添加当前任务
err = g.addRunnableTask(runnable, 0)
})
return
}