Голанг выполняет асинхронную задачу, не дожидаясь - PullRequest
0 голосов
/ 23 октября 2018

Какой-то псевдокод, описывающий мою проблему:

  1. Получить продукт из базы данных FoodProduct
  2. проверить, isExpired () FoodProduct.DueDate.Before(time.Now())
  3. if isExpired() затем запустите асинхронную задачу , чтобы обновить состояние FoodProduct в базе данных как просроченное: FoodProduct.updateStatus("expired")

    [if isExpired()=false просто перейдите к шагу 4.]

  4. верните FoodProduct клиенту через http, не ожидая ответа от шага 3

Я знаю, что у go есть goroutines, mutex и многие другие вкусности.Если меня не волнует результат асинхронной операции, какой вариант мне использовать?

1 Ответ

0 голосов
/ 23 октября 2018

просто запустите асинхронную задачу с ключевым словом go.Он будет выделяться в своей собственной программе, и вашей основной линии исполнения больше не придется о нем заботиться.

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

Обратите внимание, что, поскольку product.updateStatus почти наверняка меняет состояние этого продукта,Трудно предсказать, когда будет безопасно использовать этот продукт снова (иначе, когда он был обновлен в базовом слое базы данных)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...