一些伪代码描述了我的问题:
FoodProduct
提取产品FoodProduct.DueDate.Before(time.Now())
if isExpired()
,然后启动 async 任务以更新数据库中FoodProduct的过期状态:FoodProduct.updateStatus("expired")
[{if isExpired()=false
仅跳到步骤4。]
FoodProduct
到客户端,而无需等待步骤3的答复。我知道go有goroutines,互斥量和许多其他优点。如果我不关心异步操作的结果,应该使用哪个选项?
答案 0 :(得分:6)
只需使用go
关键字启动异步任务。它会在自己的goroutine中分解,您的执行主线不再需要关心它。
product := fetchProduct()
if product.isExpired() {
go product.updateStatus("expired")
}
// return as normal
请注意,由于product.updateStatus
几乎可以肯定会更改该产品的状态,因此很难预测何时可以安全地再次使用该产品(又称为何时在基础数据库层中对其进行更新)