@ Вокруг аспекта и функция приостановки Kotlin - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь понять, как создать аспект @Around для приостановленной функции Kotlin (например, для измерения времени, потраченного на эту функцию, или для пользовательского аспекта @Transactional):

@Timed("my-timer")
suspend fun test() {
    println("before")
    delay(50) // invokes ProceedingJoinPoint#proceed() before this line
    println("after")
}

Поскольку эта функция имеет вызов функции приостановки, функция продолжения аспекта @Around будет вызываться непосредственно перед вызовом delay (). Но, очевидно, я хотел бы измерить полное время, проведенное в функции.

Как правильно ее решить? Может быть, я могу как-то подписаться на последнее продолжение в методе, или что-то в этом роде?

1 Ответ

0 голосов
/ 03 января 2019

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

val time = measureTimeMillis {
    // yourSuperFunc()
}

Также вы можете использовать measureNanoTime. Для полной справки смотрите здесь .

...