Golang无需等待即可

时间:2018-10-23 19:51:39

标签: go

一些伪代码描述了我的问题:

  1. 从数据库FoodProduct提取产品
  2. 检查是否isExpired()FoodProduct.DueDate.Before(time.Now())
  3. if isExpired(),然后启动 async 任务以更新数据库中FoodProduct的过期状态:FoodProduct.updateStatus("expired")

    [{if isExpired()=false仅跳到步骤4。]

  4. 通过http返回FoodProduct到客户端,而无需等待步骤3的答复。

我知道go有goroutines,互斥量和许多其他优点。如果我不关心异步操作的结果,应该使用哪个选项?

1 个答案:

答案 0 :(得分:6)

只需使用go关键字启动异步任务。它会在自己的goroutine中分解,您的执行主线不再需要关心它。

product := fetchProduct()
if product.isExpired() {
        go product.updateStatus("expired")
}
// return as normal

请注意,由于product.updateStatus几乎可以肯定会更改该产品的状态,因此很难预测何时可以安全地再次使用该产品(又称为何时在基础数据库层中对其进行更新)