hadihariri | 7db5553 | 2018-09-15 10:35:08 +0200 | [diff] [blame] | 1 | The main coroutines guide has moved to the [docs folder](docs/coroutines-guide.md) and split up into smaller documents. |
Roman Elizarov | 715acd3 | 2018-10-08 20:20:12 +0300 | [diff] [blame] | 2 | |
| 3 | ## Table of contents |
| 4 | |
| 5 | <!--- TOC_REF docs/basics.md --> |
Roman Elizarov | 3258e1f | 2019-08-22 20:08:48 +0300 | [diff] [blame] | 6 | * <a name='coroutine-basics'></a>[Coroutine Basics](docs/basics.md#coroutine-basics) |
Roman Elizarov | 715acd3 | 2018-10-08 20:20:12 +0300 | [diff] [blame] | 7 | * <a name='your-first-coroutine'></a>[Your first coroutine](docs/basics.md#your-first-coroutine) |
| 8 | * <a name='bridging-blocking-and-non-blocking-worlds'></a>[Bridging blocking and non-blocking worlds](docs/basics.md#bridging-blocking-and-non-blocking-worlds) |
| 9 | * <a name='waiting-for-a-job'></a>[Waiting for a job](docs/basics.md#waiting-for-a-job) |
| 10 | * <a name='structured-concurrency'></a>[Structured concurrency](docs/basics.md#structured-concurrency) |
| 11 | * <a name='scope-builder'></a>[Scope builder](docs/basics.md#scope-builder) |
| 12 | * <a name='extract-function-refactoring'></a>[Extract function refactoring](docs/basics.md#extract-function-refactoring) |
| 13 | * <a name='coroutines-are-light-weight'></a>[Coroutines ARE light-weight](docs/basics.md#coroutines-are-light-weight) |
| 14 | * <a name='global-coroutines-are-like-daemon-threads'></a>[Global coroutines are like daemon threads](docs/basics.md#global-coroutines-are-like-daemon-threads) |
| 15 | <!--- TOC_REF docs/cancellation-and-timeouts.md --> |
Roman Elizarov | 3258e1f | 2019-08-22 20:08:48 +0300 | [diff] [blame] | 16 | * <a name='cancellation-and-timeouts'></a>[Cancellation and Timeouts](docs/cancellation-and-timeouts.md#cancellation-and-timeouts) |
Roman Elizarov | 715acd3 | 2018-10-08 20:20:12 +0300 | [diff] [blame] | 17 | * <a name='cancelling-coroutine-execution'></a>[Cancelling coroutine execution](docs/cancellation-and-timeouts.md#cancelling-coroutine-execution) |
| 18 | * <a name='cancellation-is-cooperative'></a>[Cancellation is cooperative](docs/cancellation-and-timeouts.md#cancellation-is-cooperative) |
| 19 | * <a name='making-computation-code-cancellable'></a>[Making computation code cancellable](docs/cancellation-and-timeouts.md#making-computation-code-cancellable) |
Pavel Semyonov | e3030e3 | 2019-05-06 14:26:16 +0700 | [diff] [blame] | 20 | * <a name='closing-resources-with-finally'></a>[Closing resources with `finally`](docs/cancellation-and-timeouts.md#closing-resources-with-finally) |
Roman Elizarov | 715acd3 | 2018-10-08 20:20:12 +0300 | [diff] [blame] | 21 | * <a name='run-non-cancellable-block'></a>[Run non-cancellable block](docs/cancellation-and-timeouts.md#run-non-cancellable-block) |
| 22 | * <a name='timeout'></a>[Timeout](docs/cancellation-and-timeouts.md#timeout) |
| 23 | <!--- TOC_REF docs/composing-suspending-functions.md --> |
Roman Elizarov | 3258e1f | 2019-08-22 20:08:48 +0300 | [diff] [blame] | 24 | * <a name='composing-suspending-functions'></a>[Composing Suspending Functions](docs/composing-suspending-functions.md#composing-suspending-functions) |
Roman Elizarov | 715acd3 | 2018-10-08 20:20:12 +0300 | [diff] [blame] | 25 | * <a name='sequential-by-default'></a>[Sequential by default](docs/composing-suspending-functions.md#sequential-by-default) |
| 26 | * <a name='concurrent-using-async'></a>[Concurrent using async](docs/composing-suspending-functions.md#concurrent-using-async) |
| 27 | * <a name='lazily-started-async'></a>[Lazily started async](docs/composing-suspending-functions.md#lazily-started-async) |
| 28 | * <a name='async-style-functions'></a>[Async-style functions](docs/composing-suspending-functions.md#async-style-functions) |
| 29 | * <a name='structured-concurrency-with-async'></a>[Structured concurrency with async](docs/composing-suspending-functions.md#structured-concurrency-with-async) |
| 30 | <!--- TOC_REF docs/coroutine-context-and-dispatchers.md --> |
Roman Elizarov | 3258e1f | 2019-08-22 20:08:48 +0300 | [diff] [blame] | 31 | * <a name='coroutine-context-and-dispatchers'></a>[Coroutine Context and Dispatchers](docs/coroutine-context-and-dispatchers.md#coroutine-context-and-dispatchers) |
Roman Elizarov | 715acd3 | 2018-10-08 20:20:12 +0300 | [diff] [blame] | 32 | * <a name='dispatchers-and-threads'></a>[Dispatchers and threads](docs/coroutine-context-and-dispatchers.md#dispatchers-and-threads) |
| 33 | * <a name='unconfined-vs-confined-dispatcher'></a>[Unconfined vs confined dispatcher](docs/coroutine-context-and-dispatchers.md#unconfined-vs-confined-dispatcher) |
| 34 | * <a name='debugging-coroutines-and-threads'></a>[Debugging coroutines and threads](docs/coroutine-context-and-dispatchers.md#debugging-coroutines-and-threads) |
| 35 | * <a name='jumping-between-threads'></a>[Jumping between threads](docs/coroutine-context-and-dispatchers.md#jumping-between-threads) |
| 36 | * <a name='job-in-the-context'></a>[Job in the context](docs/coroutine-context-and-dispatchers.md#job-in-the-context) |
| 37 | * <a name='children-of-a-coroutine'></a>[Children of a coroutine](docs/coroutine-context-and-dispatchers.md#children-of-a-coroutine) |
| 38 | * <a name='parental-responsibilities'></a>[Parental responsibilities](docs/coroutine-context-and-dispatchers.md#parental-responsibilities) |
| 39 | * <a name='naming-coroutines-for-debugging'></a>[Naming coroutines for debugging](docs/coroutine-context-and-dispatchers.md#naming-coroutines-for-debugging) |
| 40 | * <a name='combining-context-elements'></a>[Combining context elements](docs/coroutine-context-and-dispatchers.md#combining-context-elements) |
Vsevolod Tolstopyatov | e9123ca | 2019-03-01 15:40:16 +0300 | [diff] [blame] | 41 | * <a name='coroutine-scope'></a>[Coroutine scope](docs/coroutine-context-and-dispatchers.md#coroutine-scope) |
Roman Elizarov | 715acd3 | 2018-10-08 20:20:12 +0300 | [diff] [blame] | 42 | * <a name='thread-local-data'></a>[Thread-local data](docs/coroutine-context-and-dispatchers.md#thread-local-data) |
Roman Elizarov | 3258e1f | 2019-08-22 20:08:48 +0300 | [diff] [blame] | 43 | <!--- TOC_REF docs/flow.md --> |
| 44 | * <a name='asynchronous-flow'></a>[Asynchronous Flow](docs/flow.md#asynchronous-flow) |
| 45 | * <a name='representing-multiple-values'></a>[Representing multiple values](docs/flow.md#representing-multiple-values) |
| 46 | * <a name='sequences'></a>[Sequences](docs/flow.md#sequences) |
| 47 | * <a name='suspending-functions'></a>[Suspending functions](docs/flow.md#suspending-functions) |
| 48 | * <a name='flows'></a>[Flows](docs/flow.md#flows) |
| 49 | * <a name='flows-are-cold'></a>[Flows are cold](docs/flow.md#flows-are-cold) |
Roman Elizarov | 9bbb669 | 2020-06-03 12:02:17 +0300 | [diff] [blame^] | 50 | * <a name='flow-cancellation-basics'></a>[Flow cancellation basics](docs/flow.md#flow-cancellation-basics) |
Roman Elizarov | 3258e1f | 2019-08-22 20:08:48 +0300 | [diff] [blame] | 51 | * <a name='flow-builders'></a>[Flow builders](docs/flow.md#flow-builders) |
| 52 | * <a name='intermediate-flow-operators'></a>[Intermediate flow operators](docs/flow.md#intermediate-flow-operators) |
| 53 | * <a name='transform-operator'></a>[Transform operator](docs/flow.md#transform-operator) |
| 54 | * <a name='size-limiting-operators'></a>[Size-limiting operators](docs/flow.md#size-limiting-operators) |
| 55 | * <a name='terminal-flow-operators'></a>[Terminal flow operators](docs/flow.md#terminal-flow-operators) |
| 56 | * <a name='flows-are-sequential'></a>[Flows are sequential](docs/flow.md#flows-are-sequential) |
| 57 | * <a name='flow-context'></a>[Flow context](docs/flow.md#flow-context) |
| 58 | * <a name='wrong-emission-withcontext'></a>[Wrong emission withContext](docs/flow.md#wrong-emission-withcontext) |
| 59 | * <a name='flowon-operator'></a>[flowOn operator](docs/flow.md#flowon-operator) |
| 60 | * <a name='buffering'></a>[Buffering](docs/flow.md#buffering) |
| 61 | * <a name='conflation'></a>[Conflation](docs/flow.md#conflation) |
| 62 | * <a name='processing-the-latest-value'></a>[Processing the latest value](docs/flow.md#processing-the-latest-value) |
| 63 | * <a name='composing-multiple-flows'></a>[Composing multiple flows](docs/flow.md#composing-multiple-flows) |
| 64 | * <a name='zip'></a>[Zip](docs/flow.md#zip) |
| 65 | * <a name='combine'></a>[Combine](docs/flow.md#combine) |
| 66 | * <a name='flattening-flows'></a>[Flattening flows](docs/flow.md#flattening-flows) |
| 67 | * <a name='flatmapconcat'></a>[flatMapConcat](docs/flow.md#flatmapconcat) |
| 68 | * <a name='flatmapmerge'></a>[flatMapMerge](docs/flow.md#flatmapmerge) |
| 69 | * <a name='flatmaplatest'></a>[flatMapLatest](docs/flow.md#flatmaplatest) |
| 70 | * <a name='flow-exceptions'></a>[Flow exceptions](docs/flow.md#flow-exceptions) |
| 71 | * <a name='collector-try-and-catch'></a>[Collector try and catch](docs/flow.md#collector-try-and-catch) |
| 72 | * <a name='everything-is-caught'></a>[Everything is caught](docs/flow.md#everything-is-caught) |
| 73 | * <a name='exception-transparency'></a>[Exception transparency](docs/flow.md#exception-transparency) |
| 74 | * <a name='transparent-catch'></a>[Transparent catch](docs/flow.md#transparent-catch) |
| 75 | * <a name='catching-declaratively'></a>[Catching declaratively](docs/flow.md#catching-declaratively) |
| 76 | * <a name='flow-completion'></a>[Flow completion](docs/flow.md#flow-completion) |
| 77 | * <a name='imperative-finally-block'></a>[Imperative finally block](docs/flow.md#imperative-finally-block) |
| 78 | * <a name='declarative-handling'></a>[Declarative handling](docs/flow.md#declarative-handling) |
Roman Elizarov | eb4e7d3 | 2020-04-27 15:04:00 +0300 | [diff] [blame] | 79 | * <a name='successful-completion'></a>[Successful completion](docs/flow.md#successful-completion) |
Roman Elizarov | e95d808 | 2019-08-26 19:16:23 +0300 | [diff] [blame] | 80 | * <a name='imperative-versus-declarative'></a>[Imperative versus declarative](docs/flow.md#imperative-versus-declarative) |
Roman Elizarov | 3258e1f | 2019-08-22 20:08:48 +0300 | [diff] [blame] | 81 | * <a name='launching-flow'></a>[Launching flow](docs/flow.md#launching-flow) |
Roman Elizarov | 9bbb669 | 2020-06-03 12:02:17 +0300 | [diff] [blame^] | 82 | * <a name='flow-cancellation-checks'></a>[Flow cancellation checks](docs/flow.md#flow-cancellation-checks) |
| 83 | * <a name='making-busy-flow-cancellable'></a>[Making busy flow cancellable](docs/flow.md#making-busy-flow-cancellable) |
Vsevolod Tolstopyatov | c99704a | 2019-09-24 19:30:49 +0300 | [diff] [blame] | 84 | * <a name='flow-and-reactive-streams'></a>[Flow and Reactive Streams](docs/flow.md#flow-and-reactive-streams) |
Roman Elizarov | 715acd3 | 2018-10-08 20:20:12 +0300 | [diff] [blame] | 85 | <!--- TOC_REF docs/channels.md --> |
Roman Elizarov | 3ed7a7d | 2019-06-17 20:54:16 -0700 | [diff] [blame] | 86 | * <a name='channels'></a>[Channels](docs/channels.md#channels) |
Roman Elizarov | 715acd3 | 2018-10-08 20:20:12 +0300 | [diff] [blame] | 87 | * <a name='channel-basics'></a>[Channel basics](docs/channels.md#channel-basics) |
| 88 | * <a name='closing-and-iteration-over-channels'></a>[Closing and iteration over channels](docs/channels.md#closing-and-iteration-over-channels) |
| 89 | * <a name='building-channel-producers'></a>[Building channel producers](docs/channels.md#building-channel-producers) |
| 90 | * <a name='pipelines'></a>[Pipelines](docs/channels.md#pipelines) |
| 91 | * <a name='prime-numbers-with-pipeline'></a>[Prime numbers with pipeline](docs/channels.md#prime-numbers-with-pipeline) |
| 92 | * <a name='fan-out'></a>[Fan-out](docs/channels.md#fan-out) |
| 93 | * <a name='fan-in'></a>[Fan-in](docs/channels.md#fan-in) |
| 94 | * <a name='buffered-channels'></a>[Buffered channels](docs/channels.md#buffered-channels) |
| 95 | * <a name='channels-are-fair'></a>[Channels are fair](docs/channels.md#channels-are-fair) |
| 96 | * <a name='ticker-channels'></a>[Ticker channels](docs/channels.md#ticker-channels) |
Roman Elizarov | 3258e1f | 2019-08-22 20:08:48 +0300 | [diff] [blame] | 97 | <!--- TOC_REF docs/exception-handling.md --> |
| 98 | * <a name='exception-handling'></a>[Exception Handling](docs/exception-handling.md#exception-handling) |
| 99 | * <a name='exception-propagation'></a>[Exception propagation](docs/exception-handling.md#exception-propagation) |
| 100 | * <a name='coroutineexceptionhandler'></a>[CoroutineExceptionHandler](docs/exception-handling.md#coroutineexceptionhandler) |
| 101 | * <a name='cancellation-and-exceptions'></a>[Cancellation and exceptions](docs/exception-handling.md#cancellation-and-exceptions) |
| 102 | * <a name='exceptions-aggregation'></a>[Exceptions aggregation](docs/exception-handling.md#exceptions-aggregation) |
| 103 | * <a name='supervision'></a>[Supervision](docs/exception-handling.md#supervision) |
| 104 | * <a name='supervision-job'></a>[Supervision job](docs/exception-handling.md#supervision-job) |
| 105 | * <a name='supervision-scope'></a>[Supervision scope](docs/exception-handling.md#supervision-scope) |
| 106 | * <a name='exceptions-in-supervised-coroutines'></a>[Exceptions in supervised coroutines](docs/exception-handling.md#exceptions-in-supervised-coroutines) |
Roman Elizarov | 715acd3 | 2018-10-08 20:20:12 +0300 | [diff] [blame] | 107 | <!--- TOC_REF docs/shared-mutable-state-and-concurrency.md --> |
| 108 | * <a name='shared-mutable-state-and-concurrency'></a>[Shared mutable state and concurrency](docs/shared-mutable-state-and-concurrency.md#shared-mutable-state-and-concurrency) |
| 109 | * <a name='the-problem'></a>[The problem](docs/shared-mutable-state-and-concurrency.md#the-problem) |
| 110 | * <a name='volatiles-are-of-no-help'></a>[Volatiles are of no help](docs/shared-mutable-state-and-concurrency.md#volatiles-are-of-no-help) |
| 111 | * <a name='thread-safe-data-structures'></a>[Thread-safe data structures](docs/shared-mutable-state-and-concurrency.md#thread-safe-data-structures) |
| 112 | * <a name='thread-confinement-fine-grained'></a>[Thread confinement fine-grained](docs/shared-mutable-state-and-concurrency.md#thread-confinement-fine-grained) |
| 113 | * <a name='thread-confinement-coarse-grained'></a>[Thread confinement coarse-grained](docs/shared-mutable-state-and-concurrency.md#thread-confinement-coarse-grained) |
| 114 | * <a name='mutual-exclusion'></a>[Mutual exclusion](docs/shared-mutable-state-and-concurrency.md#mutual-exclusion) |
| 115 | * <a name='actors'></a>[Actors](docs/shared-mutable-state-and-concurrency.md#actors) |
| 116 | <!--- TOC_REF docs/select-expression.md --> |
Roman Elizarov | 3258e1f | 2019-08-22 20:08:48 +0300 | [diff] [blame] | 117 | * <a name='select-expression-experimental'></a>[Select Expression (experimental)](docs/select-expression.md#select-expression-experimental) |
Roman Elizarov | 715acd3 | 2018-10-08 20:20:12 +0300 | [diff] [blame] | 118 | * <a name='selecting-from-channels'></a>[Selecting from channels](docs/select-expression.md#selecting-from-channels) |
| 119 | * <a name='selecting-on-close'></a>[Selecting on close](docs/select-expression.md#selecting-on-close) |
| 120 | * <a name='selecting-to-send'></a>[Selecting to send](docs/select-expression.md#selecting-to-send) |
| 121 | * <a name='selecting-deferred-values'></a>[Selecting deferred values](docs/select-expression.md#selecting-deferred-values) |
| 122 | * <a name='switch-over-a-channel-of-deferred-values'></a>[Switch over a channel of deferred values](docs/select-expression.md#switch-over-a-channel-of-deferred-values) |
| 123 | <!--- END --> |