Как правильно прервать длительную деятельность Uber Cadence? - PullRequest
0 голосов
/ 30 апреля 2019

Если у меня есть длительная деятельность, которая делает что-то вроде

func Activity(ctx context.Context) error {
    ticker := time.NewTicker(5 * time.Second)
    for {
        select {
        case <-ctx.Done():
            return ctx.Err()
        case <-ticker.C:
            if isServiceReady(ctx) {
                break
            }
        }
    }
    return nil
}

и я хотел бы иметь возможность отменить это из рабочего процесса (без отмены всего рабочего процесса), как бы я тогда это сделал?

Я надеялся, что вы можете получить на канале контекста Done и затем создать отменяемый контекст в рабочем процессе, но это, очевидно, ничего не делает.

1 Ответ

0 голосов
/ 30 апреля 2019

В настоящее время, чтобы быть отменяемым, активность должна биться.Служба Cadence обеспечивает возврат статуса отмены в возвращаемое значение контрольного сигнала активности.Поэтому, если вы начинаете сердцебиение на каждом тике, и ваш интервал сердцебиения достаточно мал (так как клиент не выполняет вызов службы при каждом вызове метода пульса), тогда ваш код должен начать работать.

В будущем мы планируемдобавить понятие сеанса со списком задач для конкретного работника, чтобы доставлять отмены.После добавления отмены не будет зависеть от пульса.

...