Стоит ли ожидать метрических звонков? Безопасно ли их не ждать? - PullRequest
0 голосов
/ 07 февраля 2020

В моем бэкэнд-веб-сервисе метрики отправляются несколько раз, чтобы отслеживать его поведение. Чтобы отправить метри c, я делаю http-вызов. Я боюсь, что ожидание этого добавляет бесполезную задержку к ответам службы. Мне кажется, они должны быть огнем и забыть. Безопасно и / или рекомендуется не ожидать таких звонков?

Примечание. Мой сервис работает на c#, do tnet core.

PS: ошибки вызова могут регистрироваться самим пакетом метрик. Сбой вызова метрики не должен прерывать пользовательский вызов.

Ответы [ 2 ]

1 голос
/ 07 февраля 2020

Если вам это не нужно, то ждите. Но будьте осторожны с ошибками.

Вот некоторые расширения, которые помогут с ошибками

public static void RunAndForget(this Task task, Action<Exception> onError)
{
    task.ContinueWith(t => { onError?.Invoke(t.Exception); }, TaskContinuationOptions.OnlyOnFaulted);
}

//the Logging.LogException is a static Action so you can set it once
public static void RunAndForget(this Task task)
{
    task.ContinueWith(t => { Logging.LogException(t.Exception); }, TaskContinuationOptions.OnlyOnFaulted);
}
0 голосов
/ 19 февраля 2020

Безопасно ли запускать и забывать вызов, зависит от реализации библиотеки метрик и, возможно, от обработки ошибок (например, ведение журнала). Забытая задача может продолжать выполняться после удаления родительского контекста HTTP-запроса, и если задача пытается использовать удаленный ресурс, она может обработать sh.

В зависимости от того, возникнут ли у вас проблемы, c компонентов и как они настроены, например, если зависимости задачи зависят от сборщика мусора для очистки, то все в порядке. Однако если контейнер ASP. NET DI вызывает Dispose() зависимости задачи, то эта зависимость может начать выбрасывать InvalidOperationException.

...