代码拉取完成,页面将自动刷新
同步操作将从 chararch/gobatch 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
package gobatch
import (
"context"
"fmt"
"github.com/panjf2000/ants/v2"
)
type taskPool struct {
pool *ants.Pool
}
func newTaskPool(size int) *taskPool {
pool, _ := ants.NewPool(size)
return &taskPool{
pool: pool,
}
}
// Future get result in future
type Future interface {
Get() (interface{}, error)
}
type futureImpl struct {
ch <-chan interface{}
}
func (f *futureImpl) Get() (interface{}, error) {
result := <-f.ch
err := <-f.ch
if err == nil {
return result, nil
}
e, ok := err.(error)
if ok {
return result, e
}
return result, fmt.Errorf("future get err:%v", err)
}
func (pool *taskPool) Submit(ctx context.Context, task func() (interface{}, error)) Future {
result := make(chan interface{}, 2)
err := pool.pool.Submit(func() {
defer func() {
if err := recover(); err != nil {
//todo log
result <- nil
result <- fmt.Errorf("panic:%v", err)
close(result)
}
}()
val, err := task()
result <- val
result <- err
close(result)
})
if err != nil {
result <- nil
result <- err
close(result)
}
return &futureImpl{
ch: result,
}
}
func (pool *taskPool) Release() {
pool.pool.Release()
}
func (pool *taskPool) SetMaxSize(size int) {
pool.pool.Tune(size)
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。