blob: de30e5aa366dd269068596d8436d5f4b16dec246 [file] [log] [blame]
Francesco Vasco98a39d02017-07-27 13:02:29 +02001/*
Roman Elizarov1f74a2d2018-06-29 19:19:45 +03002 * Copyright 2016-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
Francesco Vasco98a39d02017-07-27 13:02:29 +02003 */
4package kotlinx.coroutines.experimental.time
5
Roman Elizarov8b38fa22017-09-27 17:44:31 +03006import kotlinx.coroutines.experimental.CoroutineScope
Francesco Vasco98a39d02017-07-27 13:02:29 +02007import kotlinx.coroutines.experimental.selects.SelectBuilder
8import java.time.Duration
9import java.util.concurrent.TimeUnit
10
11/**
12 * "java.time" adapter method for [kotlinx.coroutines.experimental.delay]
13 */
14public suspend fun delay(duration: Duration) =
15 kotlinx.coroutines.experimental.delay(duration.toNanos(), TimeUnit.NANOSECONDS)
16
17/**
18 * "java.time" adapter method for [SelectBuilder.onTimeout]
19 */
20public suspend fun <R> SelectBuilder<R>.onTimeout(duration: Duration, block: suspend () -> R) =
21 onTimeout(duration.toNanos(), TimeUnit.NANOSECONDS, block)
22
23/**
24 * "java.time" adapter method for [kotlinx.coroutines.experimental.withTimeout]
25 */
Roman Elizarov8b38fa22017-09-27 17:44:31 +030026public suspend fun <T> withTimeout(duration: Duration, block: suspend CoroutineScope.() -> T): T =
Francesco Vasco98a39d02017-07-27 13:02:29 +020027 kotlinx.coroutines.experimental.withTimeout(duration.toNanos(), TimeUnit.NANOSECONDS, block)
28
29/**
Roman Elizarov8b38fa22017-09-27 17:44:31 +030030 * @suppress **Deprecated**: for binary compatibility only
31 */
32@Deprecated("for binary compatibility only", level=DeprecationLevel.HIDDEN)
33public suspend fun <T> withTimeout(duration: Duration, block: suspend () -> T): T =
34 kotlinx.coroutines.experimental.withTimeout(duration.toNanos(), TimeUnit.NANOSECONDS) { block() }
35
36/**
Francesco Vasco98a39d02017-07-27 13:02:29 +020037 * "java.time" adapter method for [kotlinx.coroutines.experimental.withTimeoutOrNull]
38 */
Roman Elizarov8b38fa22017-09-27 17:44:31 +030039public suspend fun <T> withTimeoutOrNull(duration: Duration, block: suspend CoroutineScope.() -> T): T? =
Francesco Vasco98a39d02017-07-27 13:02:29 +020040 kotlinx.coroutines.experimental.withTimeoutOrNull(duration.toNanos(), TimeUnit.NANOSECONDS, block)
Roman Elizarov8b38fa22017-09-27 17:44:31 +030041
42/**
43 * @suppress **Deprecated**: for binary compatibility only
44 */
45@Deprecated("for binary compatibility only", level=DeprecationLevel.HIDDEN)
46public suspend fun <T> withTimeoutOrNull(duration: Duration, block: suspend () -> T): T? =
47 kotlinx.coroutines.experimental.withTimeoutOrNull(duration.toNanos(), TimeUnit.NANOSECONDS) { block() }