根据Go中的依赖关系执行任务

何塞·巴加特利

我认为这更多是关于逻辑的问题,而不是本身。我想找到一种基于go语言依赖关系执行任务的方法。

任务工作流程

考虑以上工作流程:任务1,2,3和4可以同时异步运行。任务1和2完成后,将执行任务10。当任务3和4完成时,将执行任务11。当任务11和12完成时,将执行任务12。当任务10和11完成时,将执行任务100。

我正在使用Go通道进行并发执行,并想找到一种控制依赖关系的有效方法。我知道我可以有某种标志和一个表来控制执行,但理想情况下,我想在内存中执行该操作以避免数据库调用来控制此类操作。我也知道有多种方法可以做到这一点,但是我想听听您的想法,因为我敢肯定有比到目前为止我能想到的更好的方法。

响应文章“如何在继续之前等待所有Goroutine完成执行”,该主题上有一个有趣的reddit线程

正确的文章是“如何在继续之前等待所有goroutine完成执行,第二部分:解决问题”,并说明了在继续执行另一任务之前等待goroutine的几种方法。

根据要同步任务的信息类型,它sync.WaitGroup是一个不错的选择(如本例所示)。

但:

当您知道期望的消息数量时,您不妨算一下它们以了解何时完成。这里的WaitGroup是多余的和令人困惑的。

这将阻塞,直到收到所有3条消息:

func main() {
  messages := make(chan int)
  go func() {
      time.Sleep(time.Second * 3)
      messages <- 1
  }()
  go func() {
      time.Sleep(time.Second * 2)
      messages <- 2
  }()
  go func() {
      time.Sleep(time.Second * 1)
      messages <- 3
  }()
  for i := 0; i < 3; i++ {
      fmt.Println(<-messages)
  }
}

因此,这实际上取决于您对正在等待的任务的了解。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从执行任务中创建任务

来自分类Dev

从php脚本中执行任务

来自分类Dev

在.rb文件中执行任务

来自分类Dev

是否可以从 doLast 中执行任务?

来自分类Dev

如何检查列表中是否有特定内容并根据列表中找到的内容执行任务?

来自分类Dev

选择主机以根据多个条件执行任务

来自分类Dev

Ansible-根据Linux服务状态执行任务

来自分类Dev

根据多个文本框值执行任务

来自分类Dev

如何根据 Stripe API 错误响应执行任务

来自分类Dev

并行执行任务

来自分类Dev

定期执行任务

来自分类Dev

具有依赖关系的异步任务执行

来自分类Dev

阻止Gradle Zip任务在执行任务之前下载依赖项

来自分类Dev

通过Celery在Django中异步执行任务的正确方法

来自分类Dev

在匿名方法中执行任务时捕获引发的异常

来自分类Dev

获取C#中已执行任务的统计信息

来自分类Dev

在新线程中执行任务时冻结JavaFX UI

来自分类Dev

在WPF应用程序中在后台执行任务

来自分类Dev

在Windows Service中执行任务循环的最佳方法

来自分类Dev

错误:-在Android Studio中执行任务':app:dexDebug'失败

来自分类Dev

Spring集成流程:在流程中执行任务

来自分类Dev

在Python中执行任务的计时器-已关闭-

来自分类Dev

在flask-sqlalchemy中插入,删除等之前执行任务

来自分类Dev

在Ansible剧本中以sudo特权执行任务

来自分类Dev

使用JavaScript中的优先级执行任务清单

来自分类Dev

Rails 在控制器中异步执行任务

来自分类Dev

多个用户在 Ruby on Rails 中执行任务

来自分类Dev

延迟然后执行任务

来自分类Dev

让异步等待并执行任务