micrometer-metrics/micrometer

Timer API does not support Kotlin suspend function (coroutines)

開放

#4,455 建立於 2023年12月7日

 (5 則留言) (6 個反應) (0 位負責人)Java (1,131 個分叉)batch import
enhancementhelp wantedkotlin

倉庫指標

星標
 (4,882 顆星)
PR 合併指標
 (平均合併 1天 21小時) (30 天內合併 100 個 PR)

描述

Please describe the feature request.

For standard (non suspend functions) it is possible to use record function to measure method invocation time:

Timer.builder("method.timed")
            .register(meterRegistry)
            .record { fn() } // fn() is a standard, non suspend function

However, it is not possible to call a suspend function from within record block:

Timer.builder("method.timed")
            .register(meterRegistry)
            .record { suspendFn() } // Suspension functions can be called only within coroutine body

The support for suspend functions should be added to the library.

Rationale Suspend functions are popular for non-blocking API, and it is currently not possible to measure time needed to call suspend functions without having a custom function to record the time.

Additional context Maybe this could be added as a extension function to the Timer interface.

貢獻者指南