Skip to content

Commit 8e2ae99

Browse files
committed
More documentation on CompletableDeferred states and style fixes
1 parent 34330f5 commit 8e2ae99

File tree

1 file changed

+30
-3
lines changed

1 file changed

+30
-3
lines changed

kotlinx-coroutines-core/src/main/kotlin/kotlinx/coroutines/experimental/CompletableDeferred.kt

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,35 @@ import kotlinx.coroutines.experimental.selects.SelectInstance
2323
* [complete], [completeExceptionally], and [cancel].
2424
*
2525
* 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.
2653
*/
27-
public interface CompletableDeferred<T> : Job, Deferred<T> {
54+
public interface CompletableDeferred<T> : Deferred<T> {
2855
/**
2956
* Completes this deferred value with a given [value]. The result is `true` if this deferred was
3057
* 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> {
4370
}
4471

4572
/**
46-
* Create a [CompletableDeferred] not completed
73+
* Creates a [CompletableDeferred] in an _active_ state.
4774
*/
4875
public fun <T> CompletableDeferred(): CompletableDeferred<T> = CompletableDeferredImpl()
4976

5077
/**
51-
* Create an already completed [CompletableDeferred] with a given [value]
78+
* Creates an already _completed_ [CompletableDeferred] with a given [value].
5279
*/
5380
public fun <T> CompletableDeferred(value: T): CompletableDeferred<T> = CompletableDeferredImpl<T>().apply { complete(value) }
5481

0 commit comments

Comments
 (0)