@@ -23,8 +23,35 @@ import kotlinx.coroutines.experimental.selects.SelectInstance
23
23
* [complete], [completeExceptionally], and [cancel].
24
24
*
25
25
* Completion functions return `false` when this deferred value is already complete.
26
+ *
27
+ * A completable deferred value has the following states:
28
+ *
29
+ * | **State** | [isActive] | [isCompleted] | [isCompletedExceptionally] | [isCancelled] |
30
+ * | ------------------------- | ---------- | ------------- | -------------------------- | ------------- |
31
+ * | _Active_ (initial state) | `true` | `false` | `false` | `false` |
32
+ * | _Cancelled_ (final state) | `false` | `true` | `true` | `true` |
33
+ * | _Resolved_ (final state) | `false` | `true` | `false` | `false` |
34
+ * | _Failed_ (final state) | `false` | `true` | `true` | `false` |
35
+ *
36
+ * A an instance of completable deferred can be created by `CompletableDeferred()` function in _active_ state.
37
+ *
38
+ * ```
39
+ * +--------+ complete +-----------+
40
+ * | Active | ---------+-> | Resolved |
41
+ * +--------+ | |(completed)|
42
+ * | | +-----------+
43
+ * | cancel |
44
+ * V | +-----------+
45
+ * +-----------+ +-> | Failed |
46
+ * | Cancelled | |(completed)|
47
+ * |(completed)| +-----------+
48
+ * +-----------+
49
+ * ```
50
+ *
51
+ * All functions on this interface and on all interfaces derived from it are **thread-safe** and can
52
+ * be safely invoked from concurrent coroutines without external synchronization.
26
53
*/
27
- public interface CompletableDeferred <T > : Job , Deferred <T > {
54
+ public interface CompletableDeferred <T > : Deferred <T > {
28
55
/* *
29
56
* Completes this deferred value with a given [value]. The result is `true` if this deferred was
30
57
* completed as a result of this invocation and `false` otherwise (if it was already completed).
@@ -43,12 +70,12 @@ public interface CompletableDeferred<T> : Job, Deferred<T> {
43
70
}
44
71
45
72
/* *
46
- * Create a [CompletableDeferred] not completed
73
+ * Creates a [CompletableDeferred] in an _active_ state.
47
74
*/
48
75
public fun <T > CompletableDeferred (): CompletableDeferred <T > = CompletableDeferredImpl ()
49
76
50
77
/* *
51
- * Create an already completed [CompletableDeferred] with a given [value]
78
+ * Creates an already _completed_ [CompletableDeferred] with a given [value].
52
79
*/
53
80
public fun <T > CompletableDeferred (value : T ): CompletableDeferred <T > = CompletableDeferredImpl <T >().apply { complete(value) }
54
81
0 commit comments