Как использовать context.Context с отменой в цепочке вызовов функций

Предположим, у меня есть такие функции:

func A(ctx context.Context) {
    // A takes some time to process
}

func B(ctx context.Context) {
    // B takes some time to process
}

func C(ctx context.Context) {
    // C takes some time to process
}

Примечание. Для обработки каждого вызова функции требуется время.

Примечание: B должен вызываться внутри функции A, а C должен вызываться внутри функции B.

Просто нужен пример для этой конкретной ситуации.

Точно так же, как если бы на их обработку не было времени. С чем конкретно у вас проблемы? Что ты пробовал?

Adrian 25.10.2018 21:31

Привет, я искал и не смог найти пример этой ситуации, когда происходит цепочка вызовов функций.

samadadi 25.10.2018 21:35

Цепочка тоже не имеет значения. Опять же, с чем конкретно у вас проблемы и что вы пробовали?

Adrian 25.10.2018 21:37

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

samadadi 25.10.2018 21:45
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
0
4
548
1

Ответы 1

Вы просто передаете тот же контекст, что и аргумент, но всякий раз, когда вы ждете результатов от канала \ удаленного сервера \ чего-либо, вы используете оператор select с ожиданием <- ctx.Done (). Всякий раз, когда контекст будет отменен (функцией отмены или из-за тайм-аута), внутренний канал будет закрыт, и операция приема всегда разблокируется на закрытом канале.

Общий пост об отмене (без контекста, но мысленно замените doneCh на ctx.Done ()) https://blog.golang.org/pipelines

Поговорите об отмене (контекстный пример со страницы 15) https://talks.golang.org/2014/gotham-context.slide#15

Пара примеров https://www.sohamkamani.com/blog/golang/2018-06-17-golang-using-context-cancellation/

Другие вопросы по теме