kotlinx.coroutines
kotlinx.coroutines copied to clipboard
```ObservableSource.asFlow()``` blocks the singleThreadContext/Dispatchers.Main on android, if the default buffer is exceeded
I found an issue, that the next block of code suddenly blocks Dispatcher. It happens only on scopes with single thread attached (like created with newSingleThreadContext("SingleThread#1") or Dispatchers.Main on android). I understand, that the default buffer is 64 items and it should suspend sending and resume collecting if no back-pressure operator is applied. But why is this does not happen in that case?
Seems that runBlocking under the hood of asFlow operator does not resume collect. Is there any way to preserve the context and handle this situation?
case 1: JVM, with newSingleThreadContext
code:
fun main() {
val context = newSingleThreadContext("SingleThread#1")
val scope = CoroutineScope(context)
scope.launch {
Observable.create<Int> {
for (i in 0..1000) {
println("${Thread.currentThread().name}-provide: $i")
it.onNext(i)
}
}
.asFlow()
.collect { println("${Thread.currentThread().name}-collect $it") }
println("finished")
}
readLine()
}
result:
SingleThread#1-provide: 0
SingleThread#1-provide: 1
...
SingleThread#1-provide: 64
SingleThread#1-provide: 65
deps:
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1-native-mt'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-rx3:1.6.1-native-mt'
implementation 'io.reactivex.rxjava3:rxjava:3.1.4'
implementation 'io.reactivex.rxjava3:rxkotlin:3.0.1'
case2: Android, with Dispatchers.Main
code:
val context = Dispatchers.Main
val scope = CoroutineScope(context)
... // same
deps:
implementation 'io.reactivex.rxjava3:rxkotlin:3.0.1'
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1"
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-rx3:1.6.1'
result is the same.
tl;dr: try Dispatchers.Main.immediate instead of Dispatchers.Main.
it.onNext is a blocking operation, not a suspend function. If there is no more space left in the buffer, the operation will hang until there is.
Most dispatchers, when asked to resume a coroutine, will not execute it immediately, but will schedule it. This is what happens here: no one is collecting anything, because the only thread in use is busy creating new elements and notifying the dispatcher that someone should process them.
Some dispatchers, like Dispatchers.Unconfined or Dispatchers.Main.immediate, when being notified that a coroutine should be resumed, instead of processing this notification in some elaborate manner, will just run the code in that coroutine until the next suspension point (in case of Dispatchers.Main.immediate, only if the thread in use is already the correct one).
On a separate note, it is incorrect to create newSingleThreadContext and not close it, as this will lead to threads leaking. You should employ the pattern newSingleThreadContext(...).use { context -> ... } instead.
it.onNextis a blocking operation, not asuspendfunction. If there is no more space left in the buffer, the operation will hang until there is.
Isn't this a common case of missing backpressure? RxJava commonly throws MissingBackpressureException on buffer overflow. Flow has its own instruments to deal with backpressure - suspending by default.
In this case it turns out that backpressure results in deadlock which is not common neither in RxJava nor in Flow hence unexpected for user. Maybe we can throw MissingBackpressureException in asFlow somehow to be more consistent with RxJava model?
Oh, I see an issue, thank you. But this is completely unexpected for collect caller behaviour. In some cases (when the user forget to use immediate/unconfined dispatcher) it leads to dispatcher deadlock with no notification (crash, lint or log) in others it is fine. This makes operator not universal but flow dispatcher based. Also there is no word about this behaviour in method documentation.
It would be much more informative to have an exception like the default Flowable behaviour, or another way to prevent this situations. Even the word about this in method documentation will enhance this issue investigation.
@vganin this suggestion has some pros and cons.
-
It's a breaking change (and we don't make these if we can help it), as
Dispatchers.Main.immediatewill not work here the way I suggested. -
… which may also be a good thing, because it doesn't work nicely in any case. If we use
Dispatchers.Unconfined, we see that the collection only starts to happen after the buffer is filled, which may lead to surprising results in some cases, but, dangerously, will be surprising in other cases. Throwing immediately may help identify the problem.Sample output
Test worker @coroutine#2-provide: 0 Test worker @coroutine#2-provide: 1 Test worker @coroutine#2-provide: 2 Test worker @coroutine#2-provide: 3 Test worker @coroutine#2-provide: 4 Test worker @coroutine#2-provide: 5 Test worker @coroutine#2-provide: 6 Test worker @coroutine#2-provide: 7 Test worker @coroutine#2-provide: 8 Test worker @coroutine#2-provide: 9 Test worker @coroutine#2-provide: 10 Test worker @coroutine#2-provide: 11 Test worker @coroutine#2-provide: 12 Test worker @coroutine#2-provide: 13 Test worker @coroutine#2-provide: 14 Test worker @coroutine#2-provide: 15 Test worker @coroutine#2-provide: 16 Test worker @coroutine#2-provide: 17 Test worker @coroutine#2-provide: 18 Test worker @coroutine#2-provide: 19 Test worker @coroutine#2-provide: 20 Test worker @coroutine#2-provide: 21 Test worker @coroutine#2-provide: 22 Test worker @coroutine#2-provide: 23 Test worker @coroutine#2-provide: 24 Test worker @coroutine#2-provide: 25 Test worker @coroutine#2-provide: 26 Test worker @coroutine#2-provide: 27 Test worker @coroutine#2-provide: 28 Test worker @coroutine#2-provide: 29 Test worker @coroutine#2-provide: 30 Test worker @coroutine#2-provide: 31 Test worker @coroutine#2-provide: 32 Test worker @coroutine#2-provide: 33 Test worker @coroutine#2-provide: 34 Test worker @coroutine#2-provide: 35 Test worker @coroutine#2-provide: 36 Test worker @coroutine#2-provide: 37 Test worker @coroutine#2-provide: 38 Test worker @coroutine#2-provide: 39 Test worker @coroutine#2-provide: 40 Test worker @coroutine#2-provide: 41 Test worker @coroutine#2-provide: 42 Test worker @coroutine#2-provide: 43 Test worker @coroutine#2-provide: 44 Test worker @coroutine#2-provide: 45 Test worker @coroutine#2-provide: 46 Test worker @coroutine#2-provide: 47 Test worker @coroutine#2-provide: 48 Test worker @coroutine#2-provide: 49 Test worker @coroutine#2-provide: 50 Test worker @coroutine#2-provide: 51 Test worker @coroutine#2-provide: 52 Test worker @coroutine#2-provide: 53 Test worker @coroutine#2-provide: 54 Test worker @coroutine#2-provide: 55 Test worker @coroutine#2-provide: 56 Test worker @coroutine#2-provide: 57 Test worker @coroutine#2-provide: 58 Test worker @coroutine#2-provide: 59 Test worker @coroutine#2-provide: 60 Test worker @coroutine#2-provide: 61 Test worker @coroutine#2-provide: 62 Test worker @coroutine#2-provide: 63 Test worker @coroutine#2-provide: 64 Test worker @coroutine#2-provide: 65 Test worker @coroutine#1-collect 0 Test worker @coroutine#1-collect 1 Test worker @coroutine#1-collect 2 Test worker @coroutine#1-collect 3 Test worker @coroutine#1-collect 4 Test worker @coroutine#1-collect 5 Test worker @coroutine#1-collect 6 Test worker @coroutine#1-collect 7 Test worker @coroutine#1-collect 8 Test worker @coroutine#1-collect 9 Test worker @coroutine#1-collect 10 Test worker @coroutine#1-collect 11 Test worker @coroutine#1-collect 12 Test worker @coroutine#1-collect 13 Test worker @coroutine#1-collect 14 Test worker @coroutine#1-collect 15 Test worker @coroutine#1-collect 16 Test worker @coroutine#1-collect 17 Test worker @coroutine#1-collect 18 Test worker @coroutine#1-collect 19 Test worker @coroutine#1-collect 20 Test worker @coroutine#1-collect 21 Test worker @coroutine#1-collect 22 Test worker @coroutine#1-collect 23 Test worker @coroutine#1-collect 24 Test worker @coroutine#1-collect 25 Test worker @coroutine#1-collect 26 Test worker @coroutine#1-collect 27 Test worker @coroutine#1-collect 28 Test worker @coroutine#1-collect 29 Test worker @coroutine#1-collect 30 Test worker @coroutine#1-collect 31 Test worker @coroutine#1-collect 32 Test worker @coroutine#1-collect 33 Test worker @coroutine#1-collect 34 Test worker @coroutine#1-collect 35 Test worker @coroutine#1-collect 36 Test worker @coroutine#1-collect 37 Test worker @coroutine#1-collect 38 Test worker @coroutine#1-collect 39 Test worker @coroutine#1-collect 40 Test worker @coroutine#1-collect 41 Test worker @coroutine#1-collect 42 Test worker @coroutine#1-collect 43 Test worker @coroutine#1-collect 44 Test worker @coroutine#1-collect 45 Test worker @coroutine#1-collect 46 Test worker @coroutine#1-collect 47 Test worker @coroutine#1-collect 48 Test worker @coroutine#1-collect 49 Test worker @coroutine#1-collect 50 Test worker @coroutine#1-collect 51 Test worker @coroutine#1-collect 52 Test worker @coroutine#1-collect 53 Test worker @coroutine#1-collect 54 Test worker @coroutine#1-collect 55 Test worker @coroutine#1-collect 56 Test worker @coroutine#1-collect 57 Test worker @coroutine#1-collect 58 Test worker @coroutine#1-collect 59 Test worker @coroutine#1-collect 60 Test worker @coroutine#1-collect 61 Test worker @coroutine#1-collect 62 Test worker @coroutine#1-collect 63 Test worker @coroutine#1-collect 64 Test worker @coroutine#2-provide: 66 Test worker @coroutine#2-provide: 67 Test worker @coroutine#2-provide: 68 Test worker @coroutine#2-provide: 69 Test worker @coroutine#2-provide: 70 Test worker @coroutine#2-provide: 71 Test worker @coroutine#2-provide: 72 Test worker @coroutine#2-provide: 73 Test worker @coroutine#2-provide: 74 Test worker @coroutine#2-provide: 75 Test worker @coroutine#2-provide: 76 Test worker @coroutine#2-provide: 77 Test worker @coroutine#2-provide: 78 Test worker @coroutine#2-provide: 79 Test worker @coroutine#2-provide: 80 Test worker @coroutine#2-provide: 81 Test worker @coroutine#2-provide: 82 Test worker @coroutine#2-provide: 83 Test worker @coroutine#2-provide: 84 Test worker @coroutine#2-provide: 85 Test worker @coroutine#2-provide: 86 Test worker @coroutine#2-provide: 87 Test worker @coroutine#2-provide: 88 Test worker @coroutine#2-provide: 89 Test worker @coroutine#2-provide: 90 Test worker @coroutine#2-provide: 91 Test worker @coroutine#2-provide: 92 Test worker @coroutine#2-provide: 93 Test worker @coroutine#2-provide: 94 Test worker @coroutine#2-provide: 95 Test worker @coroutine#2-provide: 96 Test worker @coroutine#2-provide: 97 Test worker @coroutine#2-provide: 98 Test worker @coroutine#2-provide: 99 Test worker @coroutine#2-provide: 100 Test worker @coroutine#2-provide: 101 Test worker @coroutine#2-provide: 102 Test worker @coroutine#2-provide: 103 Test worker @coroutine#2-provide: 104 Test worker @coroutine#2-provide: 105 Test worker @coroutine#2-provide: 106 Test worker @coroutine#2-provide: 107 Test worker @coroutine#2-provide: 108 Test worker @coroutine#2-provide: 109 Test worker @coroutine#2-provide: 110 Test worker @coroutine#2-provide: 111 Test worker @coroutine#2-provide: 112 Test worker @coroutine#2-provide: 113 Test worker @coroutine#2-provide: 114 Test worker @coroutine#2-provide: 115 Test worker @coroutine#2-provide: 116 Test worker @coroutine#2-provide: 117 Test worker @coroutine#2-provide: 118 Test worker @coroutine#2-provide: 119 Test worker @coroutine#2-provide: 120 Test worker @coroutine#2-provide: 121 Test worker @coroutine#2-provide: 122 Test worker @coroutine#2-provide: 123 Test worker @coroutine#2-provide: 124 Test worker @coroutine#2-provide: 125 Test worker @coroutine#2-provide: 126 Test worker @coroutine#2-provide: 127 Test worker @coroutine#2-provide: 128 Test worker @coroutine#2-provide: 129 Test worker @coroutine#2-provide: 130 Test worker @coroutine#1-collect 65 Test worker @coroutine#1-collect 66 Test worker @coroutine#1-collect 67 Test worker @coroutine#1-collect 68 Test worker @coroutine#1-collect 69 Test worker @coroutine#1-collect 70 Test worker @coroutine#1-collect 71 Test worker @coroutine#1-collect 72 Test worker @coroutine#1-collect 73 Test worker @coroutine#1-collect 74 Test worker @coroutine#1-collect 75 Test worker @coroutine#1-collect 76 Test worker @coroutine#1-collect 77 Test worker @coroutine#1-collect 78 Test worker @coroutine#1-collect 79 Test worker @coroutine#1-collect 80 Test worker @coroutine#1-collect 81 Test worker @coroutine#1-collect 82 Test worker @coroutine#1-collect 83 Test worker @coroutine#1-collect 84 Test worker @coroutine#1-collect 85 Test worker @coroutine#1-collect 86 Test worker @coroutine#1-collect 87 Test worker @coroutine#1-collect 88 Test worker @coroutine#1-collect 89 Test worker @coroutine#1-collect 90 Test worker @coroutine#1-collect 91 Test worker @coroutine#1-collect 92 Test worker @coroutine#1-collect 93 Test worker @coroutine#1-collect 94 Test worker @coroutine#1-collect 95 Test worker @coroutine#1-collect 96 Test worker @coroutine#1-collect 97 Test worker @coroutine#1-collect 98 Test worker @coroutine#1-collect 99 Test worker @coroutine#1-collect 100 Test worker @coroutine#1-collect 101 Test worker @coroutine#1-collect 102 Test worker @coroutine#1-collect 103 Test worker @coroutine#1-collect 104 Test worker @coroutine#1-collect 105 Test worker @coroutine#1-collect 106 Test worker @coroutine#1-collect 107 Test worker @coroutine#1-collect 108 Test worker @coroutine#1-collect 109 Test worker @coroutine#1-collect 110 Test worker @coroutine#1-collect 111 Test worker @coroutine#1-collect 112 Test worker @coroutine#1-collect 113 Test worker @coroutine#1-collect 114 Test worker @coroutine#1-collect 115 Test worker @coroutine#1-collect 116 Test worker @coroutine#1-collect 117 Test worker @coroutine#1-collect 118 Test worker @coroutine#1-collect 119 Test worker @coroutine#1-collect 120 Test worker @coroutine#1-collect 121 Test worker @coroutine#1-collect 122 Test worker @coroutine#1-collect 123 Test worker @coroutine#1-collect 124 Test worker @coroutine#1-collect 125 Test worker @coroutine#1-collect 126 Test worker @coroutine#1-collect 127 Test worker @coroutine#1-collect 128 Test worker @coroutine#1-collect 129 Test worker @coroutine#2-provide: 131 Test worker @coroutine#2-provide: 132 Test worker @coroutine#2-provide: 133 Test worker @coroutine#2-provide: 134 Test worker @coroutine#2-provide: 135 Test worker @coroutine#2-provide: 136 Test worker @coroutine#2-provide: 137 Test worker @coroutine#2-provide: 138 Test worker @coroutine#2-provide: 139 Test worker @coroutine#2-provide: 140 Test worker @coroutine#2-provide: 141 Test worker @coroutine#2-provide: 142 Test worker @coroutine#2-provide: 143 Test worker @coroutine#2-provide: 144 Test worker @coroutine#2-provide: 145 Test worker @coroutine#2-provide: 146 Test worker @coroutine#2-provide: 147 Test worker @coroutine#2-provide: 148 Test worker @coroutine#2-provide: 149 Test worker @coroutine#2-provide: 150 Test worker @coroutine#2-provide: 151 Test worker @coroutine#2-provide: 152 Test worker @coroutine#2-provide: 153 Test worker @coroutine#2-provide: 154 Test worker @coroutine#2-provide: 155 Test worker @coroutine#2-provide: 156 Test worker @coroutine#2-provide: 157 Test worker @coroutine#2-provide: 158 Test worker @coroutine#2-provide: 159 Test worker @coroutine#2-provide: 160 Test worker @coroutine#2-provide: 161 Test worker @coroutine#2-provide: 162 Test worker @coroutine#2-provide: 163 Test worker @coroutine#2-provide: 164 Test worker @coroutine#2-provide: 165 Test worker @coroutine#2-provide: 166 Test worker @coroutine#2-provide: 167 Test worker @coroutine#2-provide: 168 Test worker @coroutine#2-provide: 169 Test worker @coroutine#2-provide: 170 Test worker @coroutine#2-provide: 171 Test worker @coroutine#2-provide: 172 Test worker @coroutine#2-provide: 173 Test worker @coroutine#2-provide: 174 Test worker @coroutine#2-provide: 175 Test worker @coroutine#2-provide: 176 Test worker @coroutine#2-provide: 177 Test worker @coroutine#2-provide: 178 Test worker @coroutine#2-provide: 179 Test worker @coroutine#2-provide: 180 Test worker @coroutine#2-provide: 181 Test worker @coroutine#2-provide: 182 Test worker @coroutine#2-provide: 183 Test worker @coroutine#2-provide: 184 Test worker @coroutine#2-provide: 185 Test worker @coroutine#2-provide: 186 Test worker @coroutine#2-provide: 187 Test worker @coroutine#2-provide: 188 Test worker @coroutine#2-provide: 189 Test worker @coroutine#2-provide: 190 Test worker @coroutine#2-provide: 191 Test worker @coroutine#2-provide: 192 Test worker @coroutine#2-provide: 193 Test worker @coroutine#2-provide: 194 Test worker @coroutine#2-provide: 195 Test worker @coroutine#1-collect 130 Test worker @coroutine#1-collect 131 Test worker @coroutine#1-collect 132 Test worker @coroutine#1-collect 133 Test worker @coroutine#1-collect 134 Test worker @coroutine#1-collect 135 Test worker @coroutine#1-collect 136 Test worker @coroutine#1-collect 137 Test worker @coroutine#1-collect 138 Test worker @coroutine#1-collect 139 Test worker @coroutine#1-collect 140 Test worker @coroutine#1-collect 141 Test worker @coroutine#1-collect 142 Test worker @coroutine#1-collect 143 Test worker @coroutine#1-collect 144 Test worker @coroutine#1-collect 145 Test worker @coroutine#1-collect 146 Test worker @coroutine#1-collect 147 Test worker @coroutine#1-collect 148 Test worker @coroutine#1-collect 149 Test worker @coroutine#1-collect 150 Test worker @coroutine#1-collect 151 Test worker @coroutine#1-collect 152 Test worker @coroutine#1-collect 153 Test worker @coroutine#1-collect 154 Test worker @coroutine#1-collect 155 Test worker @coroutine#1-collect 156 Test worker @coroutine#1-collect 157 Test worker @coroutine#1-collect 158 Test worker @coroutine#1-collect 159 Test worker @coroutine#1-collect 160 Test worker @coroutine#1-collect 161 Test worker @coroutine#1-collect 162 Test worker @coroutine#1-collect 163 Test worker @coroutine#1-collect 164 Test worker @coroutine#1-collect 165 Test worker @coroutine#1-collect 166 Test worker @coroutine#1-collect 167 Test worker @coroutine#1-collect 168 Test worker @coroutine#1-collect 169 Test worker @coroutine#1-collect 170 Test worker @coroutine#1-collect 171 Test worker @coroutine#1-collect 172 Test worker @coroutine#1-collect 173 Test worker @coroutine#1-collect 174 Test worker @coroutine#1-collect 175 Test worker @coroutine#1-collect 176 Test worker @coroutine#1-collect 177 Test worker @coroutine#1-collect 178 Test worker @coroutine#1-collect 179 Test worker @coroutine#1-collect 180 Test worker @coroutine#1-collect 181 Test worker @coroutine#1-collect 182 Test worker @coroutine#1-collect 183 Test worker @coroutine#1-collect 184 Test worker @coroutine#1-collect 185 Test worker @coroutine#1-collect 186 Test worker @coroutine#1-collect 187 Test worker @coroutine#1-collect 188 Test worker @coroutine#1-collect 189 Test worker @coroutine#1-collect 190 Test worker @coroutine#1-collect 191 Test worker @coroutine#1-collect 192 Test worker @coroutine#1-collect 193 Test worker @coroutine#1-collect 194 Test worker @coroutine#2-provide: 196 Test worker @coroutine#2-provide: 197 Test worker @coroutine#2-provide: 198 Test worker @coroutine#2-provide: 199 Test worker @coroutine#2-provide: 200 Test worker @coroutine#2-provide: 201 Test worker @coroutine#2-provide: 202 Test worker @coroutine#2-provide: 203 Test worker @coroutine#2-provide: 204 Test worker @coroutine#2-provide: 205 Test worker @coroutine#2-provide: 206 Test worker @coroutine#2-provide: 207 Test worker @coroutine#2-provide: 208 Test worker @coroutine#2-provide: 209 Test worker @coroutine#2-provide: 210 Test worker @coroutine#2-provide: 211 Test worker @coroutine#2-provide: 212 Test worker @coroutine#2-provide: 213 Test worker @coroutine#2-provide: 214 Test worker @coroutine#2-provide: 215 Test worker @coroutine#2-provide: 216 Test worker @coroutine#2-provide: 217 Test worker @coroutine#2-provide: 218 Test worker @coroutine#2-provide: 219 Test worker @coroutine#2-provide: 220 Test worker @coroutine#2-provide: 221 Test worker @coroutine#2-provide: 222 Test worker @coroutine#2-provide: 223 Test worker @coroutine#2-provide: 224 Test worker @coroutine#2-provide: 225 Test worker @coroutine#2-provide: 226 Test worker @coroutine#2-provide: 227 Test worker @coroutine#2-provide: 228 Test worker @coroutine#2-provide: 229 Test worker @coroutine#2-provide: 230 Test worker @coroutine#2-provide: 231 Test worker @coroutine#2-provide: 232 Test worker @coroutine#2-provide: 233 Test worker @coroutine#2-provide: 234 Test worker @coroutine#2-provide: 235 Test worker @coroutine#2-provide: 236 Test worker @coroutine#2-provide: 237 Test worker @coroutine#2-provide: 238 Test worker @coroutine#2-provide: 239 Test worker @coroutine#2-provide: 240 Test worker @coroutine#2-provide: 241 Test worker @coroutine#2-provide: 242 Test worker @coroutine#2-provide: 243 Test worker @coroutine#2-provide: 244 Test worker @coroutine#2-provide: 245 Test worker @coroutine#2-provide: 246 Test worker @coroutine#2-provide: 247 Test worker @coroutine#2-provide: 248 Test worker @coroutine#2-provide: 249 Test worker @coroutine#2-provide: 250 Test worker @coroutine#2-provide: 251 Test worker @coroutine#2-provide: 252 Test worker @coroutine#2-provide: 253 Test worker @coroutine#2-provide: 254 Test worker @coroutine#2-provide: 255 Test worker @coroutine#2-provide: 256 Test worker @coroutine#2-provide: 257 Test worker @coroutine#2-provide: 258 Test worker @coroutine#2-provide: 259 Test worker @coroutine#2-provide: 260 Test worker @coroutine#1-collect 195 Test worker @coroutine#1-collect 196 Test worker @coroutine#1-collect 197 Test worker @coroutine#1-collect 198 Test worker @coroutine#1-collect 199 Test worker @coroutine#1-collect 200 Test worker @coroutine#1-collect 201 Test worker @coroutine#1-collect 202 Test worker @coroutine#1-collect 203 Test worker @coroutine#1-collect 204 Test worker @coroutine#1-collect 205 Test worker @coroutine#1-collect 206 Test worker @coroutine#1-collect 207 Test worker @coroutine#1-collect 208 Test worker @coroutine#1-collect 209 Test worker @coroutine#1-collect 210 Test worker @coroutine#1-collect 211 Test worker @coroutine#1-collect 212 Test worker @coroutine#1-collect 213 Test worker @coroutine#1-collect 214 Test worker @coroutine#1-collect 215 Test worker @coroutine#1-collect 216 Test worker @coroutine#1-collect 217 Test worker @coroutine#1-collect 218 Test worker @coroutine#1-collect 219 Test worker @coroutine#1-collect 220 Test worker @coroutine#1-collect 221 Test worker @coroutine#1-collect 222 Test worker @coroutine#1-collect 223 Test worker @coroutine#1-collect 224 Test worker @coroutine#1-collect 225 Test worker @coroutine#1-collect 226 Test worker @coroutine#1-collect 227 Test worker @coroutine#1-collect 228 Test worker @coroutine#1-collect 229 Test worker @coroutine#1-collect 230 Test worker @coroutine#1-collect 231 Test worker @coroutine#1-collect 232 Test worker @coroutine#1-collect 233 Test worker @coroutine#1-collect 234 Test worker @coroutine#1-collect 235 Test worker @coroutine#1-collect 236 Test worker @coroutine#1-collect 237 Test worker @coroutine#1-collect 238 Test worker @coroutine#1-collect 239 Test worker @coroutine#1-collect 240 Test worker @coroutine#1-collect 241 Test worker @coroutine#1-collect 242 Test worker @coroutine#1-collect 243 Test worker @coroutine#1-collect 244 Test worker @coroutine#1-collect 245 Test worker @coroutine#1-collect 246 Test worker @coroutine#1-collect 247 Test worker @coroutine#1-collect 248 Test worker @coroutine#1-collect 249 Test worker @coroutine#1-collect 250 Test worker @coroutine#1-collect 251 Test worker @coroutine#1-collect 252 Test worker @coroutine#1-collect 253 Test worker @coroutine#1-collect 254 Test worker @coroutine#1-collect 255 Test worker @coroutine#1-collect 256 Test worker @coroutine#1-collect 257 Test worker @coroutine#1-collect 258 Test worker @coroutine#1-collect 259 Test worker @coroutine#2-provide: 261 Test worker @coroutine#2-provide: 262 Test worker @coroutine#2-provide: 263 Test worker @coroutine#2-provide: 264 Test worker @coroutine#2-provide: 265 Test worker @coroutine#2-provide: 266 Test worker @coroutine#2-provide: 267 Test worker @coroutine#2-provide: 268 Test worker @coroutine#2-provide: 269 Test worker @coroutine#2-provide: 270 Test worker @coroutine#2-provide: 271 Test worker @coroutine#2-provide: 272 Test worker @coroutine#2-provide: 273 Test worker @coroutine#2-provide: 274 Test worker @coroutine#2-provide: 275 Test worker @coroutine#2-provide: 276 Test worker @coroutine#2-provide: 277 Test worker @coroutine#2-provide: 278 Test worker @coroutine#2-provide: 279 Test worker @coroutine#2-provide: 280 Test worker @coroutine#2-provide: 281 Test worker @coroutine#2-provide: 282 Test worker @coroutine#2-provide: 283 Test worker @coroutine#2-provide: 284 Test worker @coroutine#2-provide: 285 Test worker @coroutine#2-provide: 286 Test worker @coroutine#2-provide: 287 Test worker @coroutine#2-provide: 288 Test worker @coroutine#2-provide: 289 Test worker @coroutine#2-provide: 290 Test worker @coroutine#2-provide: 291 Test worker @coroutine#2-provide: 292 Test worker @coroutine#2-provide: 293 Test worker @coroutine#2-provide: 294 Test worker @coroutine#2-provide: 295 Test worker @coroutine#2-provide: 296 Test worker @coroutine#2-provide: 297 Test worker @coroutine#2-provide: 298 Test worker @coroutine#2-provide: 299 Test worker @coroutine#2-provide: 300 Test worker @coroutine#2-provide: 301 Test worker @coroutine#2-provide: 302 Test worker @coroutine#2-provide: 303 Test worker @coroutine#2-provide: 304 Test worker @coroutine#2-provide: 305 Test worker @coroutine#2-provide: 306 Test worker @coroutine#2-provide: 307 Test worker @coroutine#2-provide: 308 Test worker @coroutine#2-provide: 309 Test worker @coroutine#2-provide: 310 Test worker @coroutine#2-provide: 311 Test worker @coroutine#2-provide: 312 Test worker @coroutine#2-provide: 313 Test worker @coroutine#2-provide: 314 Test worker @coroutine#2-provide: 315 Test worker @coroutine#2-provide: 316 Test worker @coroutine#2-provide: 317 Test worker @coroutine#2-provide: 318 Test worker @coroutine#2-provide: 319 Test worker @coroutine#2-provide: 320 Test worker @coroutine#2-provide: 321 Test worker @coroutine#2-provide: 322 Test worker @coroutine#2-provide: 323 Test worker @coroutine#2-provide: 324 Test worker @coroutine#2-provide: 325 Test worker @coroutine#1-collect 260 Test worker @coroutine#1-collect 261 Test worker @coroutine#1-collect 262 Test worker @coroutine#1-collect 263 Test worker @coroutine#1-collect 264 Test worker @coroutine#1-collect 265 Test worker @coroutine#1-collect 266 Test worker @coroutine#1-collect 267 Test worker @coroutine#1-collect 268 Test worker @coroutine#1-collect 269 Test worker @coroutine#1-collect 270 Test worker @coroutine#1-collect 271 Test worker @coroutine#1-collect 272 Test worker @coroutine#1-collect 273 Test worker @coroutine#1-collect 274 Test worker @coroutine#1-collect 275 Test worker @coroutine#1-collect 276 Test worker @coroutine#1-collect 277 Test worker @coroutine#1-collect 278 Test worker @coroutine#1-collect 279 Test worker @coroutine#1-collect 280 Test worker @coroutine#1-collect 281 Test worker @coroutine#1-collect 282 Test worker @coroutine#1-collect 283 Test worker @coroutine#1-collect 284 Test worker @coroutine#1-collect 285 Test worker @coroutine#1-collect 286 Test worker @coroutine#1-collect 287 Test worker @coroutine#1-collect 288 Test worker @coroutine#1-collect 289 Test worker @coroutine#1-collect 290 Test worker @coroutine#1-collect 291 Test worker @coroutine#1-collect 292 Test worker @coroutine#1-collect 293 Test worker @coroutine#1-collect 294 Test worker @coroutine#1-collect 295 Test worker @coroutine#1-collect 296 Test worker @coroutine#1-collect 297 Test worker @coroutine#1-collect 298 Test worker @coroutine#1-collect 299 Test worker @coroutine#1-collect 300 Test worker @coroutine#1-collect 301 Test worker @coroutine#1-collect 302 Test worker @coroutine#1-collect 303 Test worker @coroutine#1-collect 304 Test worker @coroutine#1-collect 305 Test worker @coroutine#1-collect 306 Test worker @coroutine#1-collect 307 Test worker @coroutine#1-collect 308 Test worker @coroutine#1-collect 309 Test worker @coroutine#1-collect 310 Test worker @coroutine#1-collect 311 Test worker @coroutine#1-collect 312 Test worker @coroutine#1-collect 313 Test worker @coroutine#1-collect 314 Test worker @coroutine#1-collect 315 Test worker @coroutine#1-collect 316 Test worker @coroutine#1-collect 317 Test worker @coroutine#1-collect 318 Test worker @coroutine#1-collect 319 Test worker @coroutine#1-collect 320 Test worker @coroutine#1-collect 321 Test worker @coroutine#1-collect 322 Test worker @coroutine#1-collect 323 Test worker @coroutine#1-collect 324 Test worker @coroutine#2-provide: 326 Test worker @coroutine#2-provide: 327 Test worker @coroutine#2-provide: 328 Test worker @coroutine#2-provide: 329 Test worker @coroutine#2-provide: 330 Test worker @coroutine#2-provide: 331 Test worker @coroutine#2-provide: 332 Test worker @coroutine#2-provide: 333 Test worker @coroutine#2-provide: 334 Test worker @coroutine#2-provide: 335 Test worker @coroutine#2-provide: 336 Test worker @coroutine#2-provide: 337 Test worker @coroutine#2-provide: 338 Test worker @coroutine#2-provide: 339 Test worker @coroutine#2-provide: 340 Test worker @coroutine#2-provide: 341 Test worker @coroutine#2-provide: 342 Test worker @coroutine#2-provide: 343 Test worker @coroutine#2-provide: 344 Test worker @coroutine#2-provide: 345 Test worker @coroutine#2-provide: 346 Test worker @coroutine#2-provide: 347 Test worker @coroutine#2-provide: 348 Test worker @coroutine#2-provide: 349 Test worker @coroutine#2-provide: 350 Test worker @coroutine#2-provide: 351 Test worker @coroutine#2-provide: 352 Test worker @coroutine#2-provide: 353 Test worker @coroutine#2-provide: 354 Test worker @coroutine#2-provide: 355 Test worker @coroutine#2-provide: 356 Test worker @coroutine#2-provide: 357 Test worker @coroutine#2-provide: 358 Test worker @coroutine#2-provide: 359 Test worker @coroutine#2-provide: 360 Test worker @coroutine#2-provide: 361 Test worker @coroutine#2-provide: 362 Test worker @coroutine#2-provide: 363 Test worker @coroutine#2-provide: 364 Test worker @coroutine#2-provide: 365 Test worker @coroutine#2-provide: 366 Test worker @coroutine#2-provide: 367 Test worker @coroutine#2-provide: 368 Test worker @coroutine#2-provide: 369 Test worker @coroutine#2-provide: 370 Test worker @coroutine#2-provide: 371 Test worker @coroutine#2-provide: 372 Test worker @coroutine#2-provide: 373 Test worker @coroutine#2-provide: 374 Test worker @coroutine#2-provide: 375 Test worker @coroutine#2-provide: 376 Test worker @coroutine#2-provide: 377 Test worker @coroutine#2-provide: 378 Test worker @coroutine#2-provide: 379 Test worker @coroutine#2-provide: 380 Test worker @coroutine#2-provide: 381 Test worker @coroutine#2-provide: 382 Test worker @coroutine#2-provide: 383 Test worker @coroutine#2-provide: 384 Test worker @coroutine#2-provide: 385 Test worker @coroutine#2-provide: 386 Test worker @coroutine#2-provide: 387 Test worker @coroutine#2-provide: 388 Test worker @coroutine#2-provide: 389 Test worker @coroutine#2-provide: 390 Test worker @coroutine#1-collect 325 Test worker @coroutine#1-collect 326 Test worker @coroutine#1-collect 327 Test worker @coroutine#1-collect 328 Test worker @coroutine#1-collect 329 Test worker @coroutine#1-collect 330 Test worker @coroutine#1-collect 331 Test worker @coroutine#1-collect 332 Test worker @coroutine#1-collect 333 Test worker @coroutine#1-collect 334 Test worker @coroutine#1-collect 335 Test worker @coroutine#1-collect 336 Test worker @coroutine#1-collect 337 Test worker @coroutine#1-collect 338 Test worker @coroutine#1-collect 339 Test worker @coroutine#1-collect 340 Test worker @coroutine#1-collect 341 Test worker @coroutine#1-collect 342 Test worker @coroutine#1-collect 343 Test worker @coroutine#1-collect 344 Test worker @coroutine#1-collect 345 Test worker @coroutine#1-collect 346 Test worker @coroutine#1-collect 347 Test worker @coroutine#1-collect 348 Test worker @coroutine#1-collect 349 Test worker @coroutine#1-collect 350 Test worker @coroutine#1-collect 351 Test worker @coroutine#1-collect 352 Test worker @coroutine#1-collect 353 Test worker @coroutine#1-collect 354 Test worker @coroutine#1-collect 355 Test worker @coroutine#1-collect 356 Test worker @coroutine#1-collect 357 Test worker @coroutine#1-collect 358 Test worker @coroutine#1-collect 359 Test worker @coroutine#1-collect 360 Test worker @coroutine#1-collect 361 Test worker @coroutine#1-collect 362 Test worker @coroutine#1-collect 363 Test worker @coroutine#1-collect 364 Test worker @coroutine#1-collect 365 Test worker @coroutine#1-collect 366 Test worker @coroutine#1-collect 367 Test worker @coroutine#1-collect 368 Test worker @coroutine#1-collect 369 Test worker @coroutine#1-collect 370 Test worker @coroutine#1-collect 371 Test worker @coroutine#1-collect 372 Test worker @coroutine#1-collect 373 Test worker @coroutine#1-collect 374 Test worker @coroutine#1-collect 375 Test worker @coroutine#1-collect 376 Test worker @coroutine#1-collect 377 Test worker @coroutine#1-collect 378 Test worker @coroutine#1-collect 379 Test worker @coroutine#1-collect 380 Test worker @coroutine#1-collect 381 Test worker @coroutine#1-collect 382 Test worker @coroutine#1-collect 383 Test worker @coroutine#1-collect 384 Test worker @coroutine#1-collect 385 Test worker @coroutine#1-collect 386 Test worker @coroutine#1-collect 387 Test worker @coroutine#1-collect 388 Test worker @coroutine#1-collect 389 Test worker @coroutine#2-provide: 391 Test worker @coroutine#2-provide: 392 Test worker @coroutine#2-provide: 393 Test worker @coroutine#2-provide: 394 Test worker @coroutine#2-provide: 395 Test worker @coroutine#2-provide: 396 Test worker @coroutine#2-provide: 397 Test worker @coroutine#2-provide: 398 Test worker @coroutine#2-provide: 399 Test worker @coroutine#2-provide: 400 Test worker @coroutine#2-provide: 401 Test worker @coroutine#2-provide: 402 Test worker @coroutine#2-provide: 403 Test worker @coroutine#2-provide: 404 Test worker @coroutine#2-provide: 405 Test worker @coroutine#2-provide: 406 Test worker @coroutine#2-provide: 407 Test worker @coroutine#2-provide: 408 Test worker @coroutine#2-provide: 409 Test worker @coroutine#2-provide: 410 Test worker @coroutine#2-provide: 411 Test worker @coroutine#2-provide: 412 Test worker @coroutine#2-provide: 413 Test worker @coroutine#2-provide: 414 Test worker @coroutine#2-provide: 415 Test worker @coroutine#2-provide: 416 Test worker @coroutine#2-provide: 417 Test worker @coroutine#2-provide: 418 Test worker @coroutine#2-provide: 419 Test worker @coroutine#2-provide: 420 Test worker @coroutine#2-provide: 421 Test worker @coroutine#2-provide: 422 Test worker @coroutine#2-provide: 423 Test worker @coroutine#2-provide: 424 Test worker @coroutine#2-provide: 425 Test worker @coroutine#2-provide: 426 Test worker @coroutine#2-provide: 427 Test worker @coroutine#2-provide: 428 Test worker @coroutine#2-provide: 429 Test worker @coroutine#2-provide: 430 Test worker @coroutine#2-provide: 431 Test worker @coroutine#2-provide: 432 Test worker @coroutine#2-provide: 433 Test worker @coroutine#2-provide: 434 Test worker @coroutine#2-provide: 435 Test worker @coroutine#2-provide: 436 Test worker @coroutine#2-provide: 437 Test worker @coroutine#2-provide: 438 Test worker @coroutine#2-provide: 439 Test worker @coroutine#2-provide: 440 Test worker @coroutine#2-provide: 441 Test worker @coroutine#2-provide: 442 Test worker @coroutine#2-provide: 443 Test worker @coroutine#2-provide: 444 Test worker @coroutine#2-provide: 445 Test worker @coroutine#2-provide: 446 Test worker @coroutine#2-provide: 447 Test worker @coroutine#2-provide: 448 Test worker @coroutine#2-provide: 449 Test worker @coroutine#2-provide: 450 Test worker @coroutine#2-provide: 451 Test worker @coroutine#2-provide: 452 Test worker @coroutine#2-provide: 453 Test worker @coroutine#2-provide: 454 Test worker @coroutine#2-provide: 455 Test worker @coroutine#1-collect 390 Test worker @coroutine#1-collect 391 Test worker @coroutine#1-collect 392 Test worker @coroutine#1-collect 393 Test worker @coroutine#1-collect 394 Test worker @coroutine#1-collect 395 Test worker @coroutine#1-collect 396 Test worker @coroutine#1-collect 397 Test worker @coroutine#1-collect 398 Test worker @coroutine#1-collect 399 Test worker @coroutine#1-collect 400 Test worker @coroutine#1-collect 401 Test worker @coroutine#1-collect 402 Test worker @coroutine#1-collect 403 Test worker @coroutine#1-collect 404 Test worker @coroutine#1-collect 405 Test worker @coroutine#1-collect 406 Test worker @coroutine#1-collect 407 Test worker @coroutine#1-collect 408 Test worker @coroutine#1-collect 409 Test worker @coroutine#1-collect 410 Test worker @coroutine#1-collect 411 Test worker @coroutine#1-collect 412 Test worker @coroutine#1-collect 413 Test worker @coroutine#1-collect 414 Test worker @coroutine#1-collect 415 Test worker @coroutine#1-collect 416 Test worker @coroutine#1-collect 417 Test worker @coroutine#1-collect 418 Test worker @coroutine#1-collect 419 Test worker @coroutine#1-collect 420 Test worker @coroutine#1-collect 421 Test worker @coroutine#1-collect 422 Test worker @coroutine#1-collect 423 Test worker @coroutine#1-collect 424 Test worker @coroutine#1-collect 425 Test worker @coroutine#1-collect 426 Test worker @coroutine#1-collect 427 Test worker @coroutine#1-collect 428 Test worker @coroutine#1-collect 429 Test worker @coroutine#1-collect 430 Test worker @coroutine#1-collect 431 Test worker @coroutine#1-collect 432 Test worker @coroutine#1-collect 433 Test worker @coroutine#1-collect 434 Test worker @coroutine#1-collect 435 Test worker @coroutine#1-collect 436 Test worker @coroutine#1-collect 437 Test worker @coroutine#1-collect 438 Test worker @coroutine#1-collect 439 Test worker @coroutine#1-collect 440 Test worker @coroutine#1-collect 441 Test worker @coroutine#1-collect 442 Test worker @coroutine#1-collect 443 Test worker @coroutine#1-collect 444 Test worker @coroutine#1-collect 445 Test worker @coroutine#1-collect 446 Test worker @coroutine#1-collect 447 Test worker @coroutine#1-collect 448 Test worker @coroutine#1-collect 449 Test worker @coroutine#1-collect 450 Test worker @coroutine#1-collect 451 Test worker @coroutine#1-collect 452 Test worker @coroutine#1-collect 453 Test worker @coroutine#1-collect 454 Test worker @coroutine#2-provide: 456 Test worker @coroutine#2-provide: 457 Test worker @coroutine#2-provide: 458 Test worker @coroutine#2-provide: 459 Test worker @coroutine#2-provide: 460 Test worker @coroutine#2-provide: 461 Test worker @coroutine#2-provide: 462 Test worker @coroutine#2-provide: 463 Test worker @coroutine#2-provide: 464 Test worker @coroutine#2-provide: 465 Test worker @coroutine#2-provide: 466 Test worker @coroutine#2-provide: 467 Test worker @coroutine#2-provide: 468 Test worker @coroutine#2-provide: 469 Test worker @coroutine#2-provide: 470 Test worker @coroutine#2-provide: 471 Test worker @coroutine#2-provide: 472 Test worker @coroutine#2-provide: 473 Test worker @coroutine#2-provide: 474 Test worker @coroutine#2-provide: 475 Test worker @coroutine#2-provide: 476 Test worker @coroutine#2-provide: 477 Test worker @coroutine#2-provide: 478 Test worker @coroutine#2-provide: 479 Test worker @coroutine#2-provide: 480 Test worker @coroutine#2-provide: 481 Test worker @coroutine#2-provide: 482 Test worker @coroutine#2-provide: 483 Test worker @coroutine#2-provide: 484 Test worker @coroutine#2-provide: 485 Test worker @coroutine#2-provide: 486 Test worker @coroutine#2-provide: 487 Test worker @coroutine#2-provide: 488 Test worker @coroutine#2-provide: 489 Test worker @coroutine#2-provide: 490 Test worker @coroutine#2-provide: 491 Test worker @coroutine#2-provide: 492 Test worker @coroutine#2-provide: 493 Test worker @coroutine#2-provide: 494 Test worker @coroutine#2-provide: 495 Test worker @coroutine#2-provide: 496 Test worker @coroutine#2-provide: 497 Test worker @coroutine#2-provide: 498 Test worker @coroutine#2-provide: 499 Test worker @coroutine#2-provide: 500 Test worker @coroutine#2-provide: 501 Test worker @coroutine#2-provide: 502 Test worker @coroutine#2-provide: 503 Test worker @coroutine#2-provide: 504 Test worker @coroutine#2-provide: 505 Test worker @coroutine#2-provide: 506 Test worker @coroutine#2-provide: 507 Test worker @coroutine#2-provide: 508 Test worker @coroutine#2-provide: 509 Test worker @coroutine#2-provide: 510 Test worker @coroutine#2-provide: 511 Test worker @coroutine#2-provide: 512 Test worker @coroutine#2-provide: 513 Test worker @coroutine#2-provide: 514 Test worker @coroutine#2-provide: 515 Test worker @coroutine#2-provide: 516 Test worker @coroutine#2-provide: 517 Test worker @coroutine#2-provide: 518 Test worker @coroutine#2-provide: 519 Test worker @coroutine#2-provide: 520 Test worker @coroutine#1-collect 455 Test worker @coroutine#1-collect 456 Test worker @coroutine#1-collect 457 Test worker @coroutine#1-collect 458 Test worker @coroutine#1-collect 459 Test worker @coroutine#1-collect 460 Test worker @coroutine#1-collect 461 Test worker @coroutine#1-collect 462 Test worker @coroutine#1-collect 463 Test worker @coroutine#1-collect 464 Test worker @coroutine#1-collect 465 Test worker @coroutine#1-collect 466 Test worker @coroutine#1-collect 467 Test worker @coroutine#1-collect 468 Test worker @coroutine#1-collect 469 Test worker @coroutine#1-collect 470 Test worker @coroutine#1-collect 471 Test worker @coroutine#1-collect 472 Test worker @coroutine#1-collect 473 Test worker @coroutine#1-collect 474 Test worker @coroutine#1-collect 475 Test worker @coroutine#1-collect 476 Test worker @coroutine#1-collect 477 Test worker @coroutine#1-collect 478 Test worker @coroutine#1-collect 479 Test worker @coroutine#1-collect 480 Test worker @coroutine#1-collect 481 Test worker @coroutine#1-collect 482 Test worker @coroutine#1-collect 483 Test worker @coroutine#1-collect 484 Test worker @coroutine#1-collect 485 Test worker @coroutine#1-collect 486 Test worker @coroutine#1-collect 487 Test worker @coroutine#1-collect 488 Test worker @coroutine#1-collect 489 Test worker @coroutine#1-collect 490 Test worker @coroutine#1-collect 491 Test worker @coroutine#1-collect 492 Test worker @coroutine#1-collect 493 Test worker @coroutine#1-collect 494 Test worker @coroutine#1-collect 495 Test worker @coroutine#1-collect 496 Test worker @coroutine#1-collect 497 Test worker @coroutine#1-collect 498 Test worker @coroutine#1-collect 499 Test worker @coroutine#1-collect 500 Test worker @coroutine#1-collect 501 Test worker @coroutine#1-collect 502 Test worker @coroutine#1-collect 503 Test worker @coroutine#1-collect 504 Test worker @coroutine#1-collect 505 Test worker @coroutine#1-collect 506 Test worker @coroutine#1-collect 507 Test worker @coroutine#1-collect 508 Test worker @coroutine#1-collect 509 Test worker @coroutine#1-collect 510 Test worker @coroutine#1-collect 511 Test worker @coroutine#1-collect 512 Test worker @coroutine#1-collect 513 Test worker @coroutine#1-collect 514 Test worker @coroutine#1-collect 515 Test worker @coroutine#1-collect 516 Test worker @coroutine#1-collect 517 Test worker @coroutine#1-collect 518 Test worker @coroutine#1-collect 519 Test worker @coroutine#2-provide: 521 Test worker @coroutine#2-provide: 522 Test worker @coroutine#2-provide: 523 Test worker @coroutine#2-provide: 524 Test worker @coroutine#2-provide: 525 Test worker @coroutine#2-provide: 526 Test worker @coroutine#2-provide: 527 Test worker @coroutine#2-provide: 528 Test worker @coroutine#2-provide: 529 Test worker @coroutine#2-provide: 530 Test worker @coroutine#2-provide: 531 Test worker @coroutine#2-provide: 532 Test worker @coroutine#2-provide: 533 Test worker @coroutine#2-provide: 534 Test worker @coroutine#2-provide: 535 Test worker @coroutine#2-provide: 536 Test worker @coroutine#2-provide: 537 Test worker @coroutine#2-provide: 538 Test worker @coroutine#2-provide: 539 Test worker @coroutine#2-provide: 540 Test worker @coroutine#2-provide: 541 Test worker @coroutine#2-provide: 542 Test worker @coroutine#2-provide: 543 Test worker @coroutine#2-provide: 544 Test worker @coroutine#2-provide: 545 Test worker @coroutine#2-provide: 546 Test worker @coroutine#2-provide: 547 Test worker @coroutine#2-provide: 548 Test worker @coroutine#2-provide: 549 Test worker @coroutine#2-provide: 550 Test worker @coroutine#2-provide: 551 Test worker @coroutine#2-provide: 552 Test worker @coroutine#2-provide: 553 Test worker @coroutine#2-provide: 554 Test worker @coroutine#2-provide: 555 Test worker @coroutine#2-provide: 556 Test worker @coroutine#2-provide: 557 Test worker @coroutine#2-provide: 558 Test worker @coroutine#2-provide: 559 Test worker @coroutine#2-provide: 560 Test worker @coroutine#2-provide: 561 Test worker @coroutine#2-provide: 562 Test worker @coroutine#2-provide: 563 Test worker @coroutine#2-provide: 564 Test worker @coroutine#2-provide: 565 Test worker @coroutine#2-provide: 566 Test worker @coroutine#2-provide: 567 Test worker @coroutine#2-provide: 568 Test worker @coroutine#2-provide: 569 Test worker @coroutine#2-provide: 570 Test worker @coroutine#2-provide: 571 Test worker @coroutine#2-provide: 572 Test worker @coroutine#2-provide: 573 Test worker @coroutine#2-provide: 574 Test worker @coroutine#2-provide: 575 Test worker @coroutine#2-provide: 576 Test worker @coroutine#2-provide: 577 Test worker @coroutine#2-provide: 578 Test worker @coroutine#2-provide: 579 Test worker @coroutine#2-provide: 580 Test worker @coroutine#2-provide: 581 Test worker @coroutine#2-provide: 582 Test worker @coroutine#2-provide: 583 Test worker @coroutine#2-provide: 584 Test worker @coroutine#2-provide: 585 Test worker @coroutine#1-collect 520 Test worker @coroutine#1-collect 521 Test worker @coroutine#1-collect 522 Test worker @coroutine#1-collect 523 Test worker @coroutine#1-collect 524 Test worker @coroutine#1-collect 525 Test worker @coroutine#1-collect 526 Test worker @coroutine#1-collect 527 Test worker @coroutine#1-collect 528 Test worker @coroutine#1-collect 529 Test worker @coroutine#1-collect 530 Test worker @coroutine#1-collect 531 Test worker @coroutine#1-collect 532 Test worker @coroutine#1-collect 533 Test worker @coroutine#1-collect 534 Test worker @coroutine#1-collect 535 Test worker @coroutine#1-collect 536 Test worker @coroutine#1-collect 537 Test worker @coroutine#1-collect 538 Test worker @coroutine#1-collect 539 Test worker @coroutine#1-collect 540 Test worker @coroutine#1-collect 541 Test worker @coroutine#1-collect 542 Test worker @coroutine#1-collect 543 Test worker @coroutine#1-collect 544 Test worker @coroutine#1-collect 545 Test worker @coroutine#1-collect 546 Test worker @coroutine#1-collect 547 Test worker @coroutine#1-collect 548 Test worker @coroutine#1-collect 549 Test worker @coroutine#1-collect 550 Test worker @coroutine#1-collect 551 Test worker @coroutine#1-collect 552 Test worker @coroutine#1-collect 553 Test worker @coroutine#1-collect 554 Test worker @coroutine#1-collect 555 Test worker @coroutine#1-collect 556 Test worker @coroutine#1-collect 557 Test worker @coroutine#1-collect 558 Test worker @coroutine#1-collect 559 Test worker @coroutine#1-collect 560 Test worker @coroutine#1-collect 561 Test worker @coroutine#1-collect 562 Test worker @coroutine#1-collect 563 Test worker @coroutine#1-collect 564 Test worker @coroutine#1-collect 565 Test worker @coroutine#1-collect 566 Test worker @coroutine#1-collect 567 Test worker @coroutine#1-collect 568 Test worker @coroutine#1-collect 569 Test worker @coroutine#1-collect 570 Test worker @coroutine#1-collect 571 Test worker @coroutine#1-collect 572 Test worker @coroutine#1-collect 573 Test worker @coroutine#1-collect 574 Test worker @coroutine#1-collect 575 Test worker @coroutine#1-collect 576 Test worker @coroutine#1-collect 577 Test worker @coroutine#1-collect 578 Test worker @coroutine#1-collect 579 Test worker @coroutine#1-collect 580 Test worker @coroutine#1-collect 581 Test worker @coroutine#1-collect 582 Test worker @coroutine#1-collect 583 Test worker @coroutine#1-collect 584 Test worker @coroutine#2-provide: 586 Test worker @coroutine#2-provide: 587 Test worker @coroutine#2-provide: 588 Test worker @coroutine#2-provide: 589 Test worker @coroutine#2-provide: 590 Test worker @coroutine#2-provide: 591 Test worker @coroutine#2-provide: 592 Test worker @coroutine#2-provide: 593 Test worker @coroutine#2-provide: 594 Test worker @coroutine#2-provide: 595 Test worker @coroutine#2-provide: 596 Test worker @coroutine#2-provide: 597 Test worker @coroutine#2-provide: 598 Test worker @coroutine#2-provide: 599 Test worker @coroutine#2-provide: 600 Test worker @coroutine#2-provide: 601 Test worker @coroutine#2-provide: 602 Test worker @coroutine#2-provide: 603 Test worker @coroutine#2-provide: 604 Test worker @coroutine#2-provide: 605 Test worker @coroutine#2-provide: 606 Test worker @coroutine#2-provide: 607 Test worker @coroutine#2-provide: 608 Test worker @coroutine#2-provide: 609 Test worker @coroutine#2-provide: 610 Test worker @coroutine#2-provide: 611 Test worker @coroutine#2-provide: 612 Test worker @coroutine#2-provide: 613 Test worker @coroutine#2-provide: 614 Test worker @coroutine#2-provide: 615 Test worker @coroutine#2-provide: 616 Test worker @coroutine#2-provide: 617 Test worker @coroutine#2-provide: 618 Test worker @coroutine#2-provide: 619 Test worker @coroutine#2-provide: 620 Test worker @coroutine#2-provide: 621 Test worker @coroutine#2-provide: 622 Test worker @coroutine#2-provide: 623 Test worker @coroutine#2-provide: 624 Test worker @coroutine#2-provide: 625 Test worker @coroutine#2-provide: 626 Test worker @coroutine#2-provide: 627 Test worker @coroutine#2-provide: 628 Test worker @coroutine#2-provide: 629 Test worker @coroutine#2-provide: 630 Test worker @coroutine#2-provide: 631 Test worker @coroutine#2-provide: 632 Test worker @coroutine#2-provide: 633 Test worker @coroutine#2-provide: 634 Test worker @coroutine#2-provide: 635 Test worker @coroutine#2-provide: 636 Test worker @coroutine#2-provide: 637 Test worker @coroutine#2-provide: 638 Test worker @coroutine#2-provide: 639 Test worker @coroutine#2-provide: 640 Test worker @coroutine#2-provide: 641 Test worker @coroutine#2-provide: 642 Test worker @coroutine#2-provide: 643 Test worker @coroutine#2-provide: 644 Test worker @coroutine#2-provide: 645 Test worker @coroutine#2-provide: 646 Test worker @coroutine#2-provide: 647 Test worker @coroutine#2-provide: 648 Test worker @coroutine#2-provide: 649 Test worker @coroutine#2-provide: 650 Test worker @coroutine#1-collect 585 Test worker @coroutine#1-collect 586 Test worker @coroutine#1-collect 587 Test worker @coroutine#1-collect 588 Test worker @coroutine#1-collect 589 Test worker @coroutine#1-collect 590 Test worker @coroutine#1-collect 591 Test worker @coroutine#1-collect 592 Test worker @coroutine#1-collect 593 Test worker @coroutine#1-collect 594 Test worker @coroutine#1-collect 595 Test worker @coroutine#1-collect 596 Test worker @coroutine#1-collect 597 Test worker @coroutine#1-collect 598 Test worker @coroutine#1-collect 599 Test worker @coroutine#1-collect 600 Test worker @coroutine#1-collect 601 Test worker @coroutine#1-collect 602 Test worker @coroutine#1-collect 603 Test worker @coroutine#1-collect 604 Test worker @coroutine#1-collect 605 Test worker @coroutine#1-collect 606 Test worker @coroutine#1-collect 607 Test worker @coroutine#1-collect 608 Test worker @coroutine#1-collect 609 Test worker @coroutine#1-collect 610 Test worker @coroutine#1-collect 611 Test worker @coroutine#1-collect 612 Test worker @coroutine#1-collect 613 Test worker @coroutine#1-collect 614 Test worker @coroutine#1-collect 615 Test worker @coroutine#1-collect 616 Test worker @coroutine#1-collect 617 Test worker @coroutine#1-collect 618 Test worker @coroutine#1-collect 619 Test worker @coroutine#1-collect 620 Test worker @coroutine#1-collect 621 Test worker @coroutine#1-collect 622 Test worker @coroutine#1-collect 623 Test worker @coroutine#1-collect 624 Test worker @coroutine#1-collect 625 Test worker @coroutine#1-collect 626 Test worker @coroutine#1-collect 627 Test worker @coroutine#1-collect 628 Test worker @coroutine#1-collect 629 Test worker @coroutine#1-collect 630 Test worker @coroutine#1-collect 631 Test worker @coroutine#1-collect 632 Test worker @coroutine#1-collect 633 Test worker @coroutine#1-collect 634 Test worker @coroutine#1-collect 635 Test worker @coroutine#1-collect 636 Test worker @coroutine#1-collect 637 Test worker @coroutine#1-collect 638 Test worker @coroutine#1-collect 639 Test worker @coroutine#1-collect 640 Test worker @coroutine#1-collect 641 Test worker @coroutine#1-collect 642 Test worker @coroutine#1-collect 643 Test worker @coroutine#1-collect 644 Test worker @coroutine#1-collect 645 Test worker @coroutine#1-collect 646 Test worker @coroutine#1-collect 647 Test worker @coroutine#1-collect 648 Test worker @coroutine#1-collect 649 Test worker @coroutine#2-provide: 651 Test worker @coroutine#2-provide: 652 Test worker @coroutine#2-provide: 653 Test worker @coroutine#2-provide: 654 Test worker @coroutine#2-provide: 655 Test worker @coroutine#2-provide: 656 Test worker @coroutine#2-provide: 657 Test worker @coroutine#2-provide: 658 Test worker @coroutine#2-provide: 659 Test worker @coroutine#2-provide: 660 Test worker @coroutine#2-provide: 661 Test worker @coroutine#2-provide: 662 Test worker @coroutine#2-provide: 663 Test worker @coroutine#2-provide: 664 Test worker @coroutine#2-provide: 665 Test worker @coroutine#2-provide: 666 Test worker @coroutine#2-provide: 667 Test worker @coroutine#2-provide: 668 Test worker @coroutine#2-provide: 669 Test worker @coroutine#2-provide: 670 Test worker @coroutine#2-provide: 671 Test worker @coroutine#2-provide: 672 Test worker @coroutine#2-provide: 673 Test worker @coroutine#2-provide: 674 Test worker @coroutine#2-provide: 675 Test worker @coroutine#2-provide: 676 Test worker @coroutine#2-provide: 677 Test worker @coroutine#2-provide: 678 Test worker @coroutine#2-provide: 679 Test worker @coroutine#2-provide: 680 Test worker @coroutine#2-provide: 681 Test worker @coroutine#2-provide: 682 Test worker @coroutine#2-provide: 683 Test worker @coroutine#2-provide: 684 Test worker @coroutine#2-provide: 685 Test worker @coroutine#2-provide: 686 Test worker @coroutine#2-provide: 687 Test worker @coroutine#2-provide: 688 Test worker @coroutine#2-provide: 689 Test worker @coroutine#2-provide: 690 Test worker @coroutine#2-provide: 691 Test worker @coroutine#2-provide: 692 Test worker @coroutine#2-provide: 693 Test worker @coroutine#2-provide: 694 Test worker @coroutine#2-provide: 695 Test worker @coroutine#2-provide: 696 Test worker @coroutine#2-provide: 697 Test worker @coroutine#2-provide: 698 Test worker @coroutine#2-provide: 699 Test worker @coroutine#2-provide: 700 Test worker @coroutine#2-provide: 701 Test worker @coroutine#2-provide: 702 Test worker @coroutine#2-provide: 703 Test worker @coroutine#2-provide: 704 Test worker @coroutine#2-provide: 705 Test worker @coroutine#2-provide: 706 Test worker @coroutine#2-provide: 707 Test worker @coroutine#2-provide: 708 Test worker @coroutine#2-provide: 709 Test worker @coroutine#2-provide: 710 Test worker @coroutine#2-provide: 711 Test worker @coroutine#2-provide: 712 Test worker @coroutine#2-provide: 713 Test worker @coroutine#2-provide: 714 Test worker @coroutine#2-provide: 715 Test worker @coroutine#1-collect 650 Test worker @coroutine#1-collect 651 Test worker @coroutine#1-collect 652 Test worker @coroutine#1-collect 653 Test worker @coroutine#1-collect 654 Test worker @coroutine#1-collect 655 Test worker @coroutine#1-collect 656 Test worker @coroutine#1-collect 657 Test worker @coroutine#1-collect 658 Test worker @coroutine#1-collect 659 Test worker @coroutine#1-collect 660 Test worker @coroutine#1-collect 661 Test worker @coroutine#1-collect 662 Test worker @coroutine#1-collect 663 Test worker @coroutine#1-collect 664 Test worker @coroutine#1-collect 665 Test worker @coroutine#1-collect 666 Test worker @coroutine#1-collect 667 Test worker @coroutine#1-collect 668 Test worker @coroutine#1-collect 669 Test worker @coroutine#1-collect 670 Test worker @coroutine#1-collect 671 Test worker @coroutine#1-collect 672 Test worker @coroutine#1-collect 673 Test worker @coroutine#1-collect 674 Test worker @coroutine#1-collect 675 Test worker @coroutine#1-collect 676 Test worker @coroutine#1-collect 677 Test worker @coroutine#1-collect 678 Test worker @coroutine#1-collect 679 Test worker @coroutine#1-collect 680 Test worker @coroutine#1-collect 681 Test worker @coroutine#1-collect 682 Test worker @coroutine#1-collect 683 Test worker @coroutine#1-collect 684 Test worker @coroutine#1-collect 685 Test worker @coroutine#1-collect 686 Test worker @coroutine#1-collect 687 Test worker @coroutine#1-collect 688 Test worker @coroutine#1-collect 689 Test worker @coroutine#1-collect 690 Test worker @coroutine#1-collect 691 Test worker @coroutine#1-collect 692 Test worker @coroutine#1-collect 693 Test worker @coroutine#1-collect 694 Test worker @coroutine#1-collect 695 Test worker @coroutine#1-collect 696 Test worker @coroutine#1-collect 697 Test worker @coroutine#1-collect 698 Test worker @coroutine#1-collect 699 Test worker @coroutine#1-collect 700 Test worker @coroutine#1-collect 701 Test worker @coroutine#1-collect 702 Test worker @coroutine#1-collect 703 Test worker @coroutine#1-collect 704 Test worker @coroutine#1-collect 705 Test worker @coroutine#1-collect 706 Test worker @coroutine#1-collect 707 Test worker @coroutine#1-collect 708 Test worker @coroutine#1-collect 709 Test worker @coroutine#1-collect 710 Test worker @coroutine#1-collect 711 Test worker @coroutine#1-collect 712 Test worker @coroutine#1-collect 713 Test worker @coroutine#1-collect 714 Test worker @coroutine#2-provide: 716 Test worker @coroutine#2-provide: 717 Test worker @coroutine#2-provide: 718 Test worker @coroutine#2-provide: 719 Test worker @coroutine#2-provide: 720 Test worker @coroutine#2-provide: 721 Test worker @coroutine#2-provide: 722 Test worker @coroutine#2-provide: 723 Test worker @coroutine#2-provide: 724 Test worker @coroutine#2-provide: 725 Test worker @coroutine#2-provide: 726 Test worker @coroutine#2-provide: 727 Test worker @coroutine#2-provide: 728 Test worker @coroutine#2-provide: 729 Test worker @coroutine#2-provide: 730 Test worker @coroutine#2-provide: 731 Test worker @coroutine#2-provide: 732 Test worker @coroutine#2-provide: 733 Test worker @coroutine#2-provide: 734 Test worker @coroutine#2-provide: 735 Test worker @coroutine#2-provide: 736 Test worker @coroutine#2-provide: 737 Test worker @coroutine#2-provide: 738 Test worker @coroutine#2-provide: 739 Test worker @coroutine#2-provide: 740 Test worker @coroutine#2-provide: 741 Test worker @coroutine#2-provide: 742 Test worker @coroutine#2-provide: 743 Test worker @coroutine#2-provide: 744 Test worker @coroutine#2-provide: 745 Test worker @coroutine#2-provide: 746 Test worker @coroutine#2-provide: 747 Test worker @coroutine#2-provide: 748 Test worker @coroutine#2-provide: 749 Test worker @coroutine#2-provide: 750 Test worker @coroutine#2-provide: 751 Test worker @coroutine#2-provide: 752 Test worker @coroutine#2-provide: 753 Test worker @coroutine#2-provide: 754 Test worker @coroutine#2-provide: 755 Test worker @coroutine#2-provide: 756 Test worker @coroutine#2-provide: 757 Test worker @coroutine#2-provide: 758 Test worker @coroutine#2-provide: 759 Test worker @coroutine#2-provide: 760 Test worker @coroutine#2-provide: 761 Test worker @coroutine#2-provide: 762 Test worker @coroutine#2-provide: 763 Test worker @coroutine#2-provide: 764 Test worker @coroutine#2-provide: 765 Test worker @coroutine#2-provide: 766 Test worker @coroutine#2-provide: 767 Test worker @coroutine#2-provide: 768 Test worker @coroutine#2-provide: 769 Test worker @coroutine#2-provide: 770 Test worker @coroutine#2-provide: 771 Test worker @coroutine#2-provide: 772 Test worker @coroutine#2-provide: 773 Test worker @coroutine#2-provide: 774 Test worker @coroutine#2-provide: 775 Test worker @coroutine#2-provide: 776 Test worker @coroutine#2-provide: 777 Test worker @coroutine#2-provide: 778 Test worker @coroutine#2-provide: 779 Test worker @coroutine#2-provide: 780 Test worker @coroutine#1-collect 715 Test worker @coroutine#1-collect 716 Test worker @coroutine#1-collect 717 Test worker @coroutine#1-collect 718 Test worker @coroutine#1-collect 719 Test worker @coroutine#1-collect 720 Test worker @coroutine#1-collect 721 Test worker @coroutine#1-collect 722 Test worker @coroutine#1-collect 723 Test worker @coroutine#1-collect 724 Test worker @coroutine#1-collect 725 Test worker @coroutine#1-collect 726 Test worker @coroutine#1-collect 727 Test worker @coroutine#1-collect 728 Test worker @coroutine#1-collect 729 Test worker @coroutine#1-collect 730 Test worker @coroutine#1-collect 731 Test worker @coroutine#1-collect 732 Test worker @coroutine#1-collect 733 Test worker @coroutine#1-collect 734 Test worker @coroutine#1-collect 735 Test worker @coroutine#1-collect 736 Test worker @coroutine#1-collect 737 Test worker @coroutine#1-collect 738 Test worker @coroutine#1-collect 739 Test worker @coroutine#1-collect 740 Test worker @coroutine#1-collect 741 Test worker @coroutine#1-collect 742 Test worker @coroutine#1-collect 743 Test worker @coroutine#1-collect 744 Test worker @coroutine#1-collect 745 Test worker @coroutine#1-collect 746 Test worker @coroutine#1-collect 747 Test worker @coroutine#1-collect 748 Test worker @coroutine#1-collect 749 Test worker @coroutine#1-collect 750 Test worker @coroutine#1-collect 751 Test worker @coroutine#1-collect 752 Test worker @coroutine#1-collect 753 Test worker @coroutine#1-collect 754 Test worker @coroutine#1-collect 755 Test worker @coroutine#1-collect 756 Test worker @coroutine#1-collect 757 Test worker @coroutine#1-collect 758 Test worker @coroutine#1-collect 759 Test worker @coroutine#1-collect 760 Test worker @coroutine#1-collect 761 Test worker @coroutine#1-collect 762 Test worker @coroutine#1-collect 763 Test worker @coroutine#1-collect 764 Test worker @coroutine#1-collect 765 Test worker @coroutine#1-collect 766 Test worker @coroutine#1-collect 767 Test worker @coroutine#1-collect 768 Test worker @coroutine#1-collect 769 Test worker @coroutine#1-collect 770 Test worker @coroutine#1-collect 771 Test worker @coroutine#1-collect 772 Test worker @coroutine#1-collect 773 Test worker @coroutine#1-collect 774 Test worker @coroutine#1-collect 775 Test worker @coroutine#1-collect 776 Test worker @coroutine#1-collect 777 Test worker @coroutine#1-collect 778 Test worker @coroutine#1-collect 779 Test worker @coroutine#2-provide: 781 Test worker @coroutine#2-provide: 782 Test worker @coroutine#2-provide: 783 Test worker @coroutine#2-provide: 784 Test worker @coroutine#2-provide: 785 Test worker @coroutine#2-provide: 786 Test worker @coroutine#2-provide: 787 Test worker @coroutine#2-provide: 788 Test worker @coroutine#2-provide: 789 Test worker @coroutine#2-provide: 790 Test worker @coroutine#2-provide: 791 Test worker @coroutine#2-provide: 792 Test worker @coroutine#2-provide: 793 Test worker @coroutine#2-provide: 794 Test worker @coroutine#2-provide: 795 Test worker @coroutine#2-provide: 796 Test worker @coroutine#2-provide: 797 Test worker @coroutine#2-provide: 798 Test worker @coroutine#2-provide: 799 Test worker @coroutine#2-provide: 800 Test worker @coroutine#2-provide: 801 Test worker @coroutine#2-provide: 802 Test worker @coroutine#2-provide: 803 Test worker @coroutine#2-provide: 804 Test worker @coroutine#2-provide: 805 Test worker @coroutine#2-provide: 806 Test worker @coroutine#2-provide: 807 Test worker @coroutine#2-provide: 808 Test worker @coroutine#2-provide: 809 Test worker @coroutine#2-provide: 810 Test worker @coroutine#2-provide: 811 Test worker @coroutine#2-provide: 812 Test worker @coroutine#2-provide: 813 Test worker @coroutine#2-provide: 814 Test worker @coroutine#2-provide: 815 Test worker @coroutine#2-provide: 816 Test worker @coroutine#2-provide: 817 Test worker @coroutine#2-provide: 818 Test worker @coroutine#2-provide: 819 Test worker @coroutine#2-provide: 820 Test worker @coroutine#2-provide: 821 Test worker @coroutine#2-provide: 822 Test worker @coroutine#2-provide: 823 Test worker @coroutine#2-provide: 824 Test worker @coroutine#2-provide: 825 Test worker @coroutine#2-provide: 826 Test worker @coroutine#2-provide: 827 Test worker @coroutine#2-provide: 828 Test worker @coroutine#2-provide: 829 Test worker @coroutine#2-provide: 830 Test worker @coroutine#2-provide: 831 Test worker @coroutine#2-provide: 832 Test worker @coroutine#2-provide: 833 Test worker @coroutine#2-provide: 834 Test worker @coroutine#2-provide: 835 Test worker @coroutine#2-provide: 836 Test worker @coroutine#2-provide: 837 Test worker @coroutine#2-provide: 838 Test worker @coroutine#2-provide: 839 Test worker @coroutine#2-provide: 840 Test worker @coroutine#2-provide: 841 Test worker @coroutine#2-provide: 842 Test worker @coroutine#2-provide: 843 Test worker @coroutine#2-provide: 844 Test worker @coroutine#2-provide: 845 Test worker @coroutine#1-collect 780 Test worker @coroutine#1-collect 781 Test worker @coroutine#1-collect 782 Test worker @coroutine#1-collect 783 Test worker @coroutine#1-collect 784 Test worker @coroutine#1-collect 785 Test worker @coroutine#1-collect 786 Test worker @coroutine#1-collect 787 Test worker @coroutine#1-collect 788 Test worker @coroutine#1-collect 789 Test worker @coroutine#1-collect 790 Test worker @coroutine#1-collect 791 Test worker @coroutine#1-collect 792 Test worker @coroutine#1-collect 793 Test worker @coroutine#1-collect 794 Test worker @coroutine#1-collect 795 Test worker @coroutine#1-collect 796 Test worker @coroutine#1-collect 797 Test worker @coroutine#1-collect 798 Test worker @coroutine#1-collect 799 Test worker @coroutine#1-collect 800 Test worker @coroutine#1-collect 801 Test worker @coroutine#1-collect 802 Test worker @coroutine#1-collect 803 Test worker @coroutine#1-collect 804 Test worker @coroutine#1-collect 805 Test worker @coroutine#1-collect 806 Test worker @coroutine#1-collect 807 Test worker @coroutine#1-collect 808 Test worker @coroutine#1-collect 809 Test worker @coroutine#1-collect 810 Test worker @coroutine#1-collect 811 Test worker @coroutine#1-collect 812 Test worker @coroutine#1-collect 813 Test worker @coroutine#1-collect 814 Test worker @coroutine#1-collect 815 Test worker @coroutine#1-collect 816 Test worker @coroutine#1-collect 817 Test worker @coroutine#1-collect 818 Test worker @coroutine#1-collect 819 Test worker @coroutine#1-collect 820 Test worker @coroutine#1-collect 821 Test worker @coroutine#1-collect 822 Test worker @coroutine#1-collect 823 Test worker @coroutine#1-collect 824 Test worker @coroutine#1-collect 825 Test worker @coroutine#1-collect 826 Test worker @coroutine#1-collect 827 Test worker @coroutine#1-collect 828 Test worker @coroutine#1-collect 829 Test worker @coroutine#1-collect 830 Test worker @coroutine#1-collect 831 Test worker @coroutine#1-collect 832 Test worker @coroutine#1-collect 833 Test worker @coroutine#1-collect 834 Test worker @coroutine#1-collect 835 Test worker @coroutine#1-collect 836 Test worker @coroutine#1-collect 837 Test worker @coroutine#1-collect 838 Test worker @coroutine#1-collect 839 Test worker @coroutine#1-collect 840 Test worker @coroutine#1-collect 841 Test worker @coroutine#1-collect 842 Test worker @coroutine#1-collect 843 Test worker @coroutine#1-collect 844 Test worker @coroutine#2-provide: 846 Test worker @coroutine#2-provide: 847 Test worker @coroutine#2-provide: 848 Test worker @coroutine#2-provide: 849 Test worker @coroutine#2-provide: 850 Test worker @coroutine#2-provide: 851 Test worker @coroutine#2-provide: 852 Test worker @coroutine#2-provide: 853 Test worker @coroutine#2-provide: 854 Test worker @coroutine#2-provide: 855 Test worker @coroutine#2-provide: 856 Test worker @coroutine#2-provide: 857 Test worker @coroutine#2-provide: 858 Test worker @coroutine#2-provide: 859 Test worker @coroutine#2-provide: 860 Test worker @coroutine#2-provide: 861 Test worker @coroutine#2-provide: 862 Test worker @coroutine#2-provide: 863 Test worker @coroutine#2-provide: 864 Test worker @coroutine#2-provide: 865 Test worker @coroutine#2-provide: 866 Test worker @coroutine#2-provide: 867 Test worker @coroutine#2-provide: 868 Test worker @coroutine#2-provide: 869 Test worker @coroutine#2-provide: 870 Test worker @coroutine#2-provide: 871 Test worker @coroutine#2-provide: 872 Test worker @coroutine#2-provide: 873 Test worker @coroutine#2-provide: 874 Test worker @coroutine#2-provide: 875 Test worker @coroutine#2-provide: 876 Test worker @coroutine#2-provide: 877 Test worker @coroutine#2-provide: 878 Test worker @coroutine#2-provide: 879 Test worker @coroutine#2-provide: 880 Test worker @coroutine#2-provide: 881 Test worker @coroutine#2-provide: 882 Test worker @coroutine#2-provide: 883 Test worker @coroutine#2-provide: 884 Test worker @coroutine#2-provide: 885 Test worker @coroutine#2-provide: 886 Test worker @coroutine#2-provide: 887 Test worker @coroutine#2-provide: 888 Test worker @coroutine#2-provide: 889 Test worker @coroutine#2-provide: 890 Test worker @coroutine#2-provide: 891 Test worker @coroutine#2-provide: 892 Test worker @coroutine#2-provide: 893 Test worker @coroutine#2-provide: 894 Test worker @coroutine#2-provide: 895 Test worker @coroutine#2-provide: 896 Test worker @coroutine#2-provide: 897 Test worker @coroutine#2-provide: 898 Test worker @coroutine#2-provide: 899 Test worker @coroutine#2-provide: 900 Test worker @coroutine#2-provide: 901 Test worker @coroutine#2-provide: 902 Test worker @coroutine#2-provide: 903 Test worker @coroutine#2-provide: 904 Test worker @coroutine#2-provide: 905 Test worker @coroutine#2-provide: 906 Test worker @coroutine#2-provide: 907 Test worker @coroutine#2-provide: 908 Test worker @coroutine#2-provide: 909 Test worker @coroutine#2-provide: 910 Test worker @coroutine#1-collect 845 Test worker @coroutine#1-collect 846 Test worker @coroutine#1-collect 847 Test worker @coroutine#1-collect 848 Test worker @coroutine#1-collect 849 Test worker @coroutine#1-collect 850 Test worker @coroutine#1-collect 851 Test worker @coroutine#1-collect 852 Test worker @coroutine#1-collect 853 Test worker @coroutine#1-collect 854 Test worker @coroutine#1-collect 855 Test worker @coroutine#1-collect 856 Test worker @coroutine#1-collect 857 Test worker @coroutine#1-collect 858 Test worker @coroutine#1-collect 859 Test worker @coroutine#1-collect 860 Test worker @coroutine#1-collect 861 Test worker @coroutine#1-collect 862 Test worker @coroutine#1-collect 863 Test worker @coroutine#1-collect 864 Test worker @coroutine#1-collect 865 Test worker @coroutine#1-collect 866 Test worker @coroutine#1-collect 867 Test worker @coroutine#1-collect 868 Test worker @coroutine#1-collect 869 Test worker @coroutine#1-collect 870 Test worker @coroutine#1-collect 871 Test worker @coroutine#1-collect 872 Test worker @coroutine#1-collect 873 Test worker @coroutine#1-collect 874 Test worker @coroutine#1-collect 875 Test worker @coroutine#1-collect 876 Test worker @coroutine#1-collect 877 Test worker @coroutine#1-collect 878 Test worker @coroutine#1-collect 879 Test worker @coroutine#1-collect 880 Test worker @coroutine#1-collect 881 Test worker @coroutine#1-collect 882 Test worker @coroutine#1-collect 883 Test worker @coroutine#1-collect 884 Test worker @coroutine#1-collect 885 Test worker @coroutine#1-collect 886 Test worker @coroutine#1-collect 887 Test worker @coroutine#1-collect 888 Test worker @coroutine#1-collect 889 Test worker @coroutine#1-collect 890 Test worker @coroutine#1-collect 891 Test worker @coroutine#1-collect 892 Test worker @coroutine#1-collect 893 Test worker @coroutine#1-collect 894 Test worker @coroutine#1-collect 895 Test worker @coroutine#1-collect 896 Test worker @coroutine#1-collect 897 Test worker @coroutine#1-collect 898 Test worker @coroutine#1-collect 899 Test worker @coroutine#1-collect 900 Test worker @coroutine#1-collect 901 Test worker @coroutine#1-collect 902 Test worker @coroutine#1-collect 903 Test worker @coroutine#1-collect 904 Test worker @coroutine#1-collect 905 Test worker @coroutine#1-collect 906 Test worker @coroutine#1-collect 907 Test worker @coroutine#1-collect 908 Test worker @coroutine#1-collect 909 Test worker @coroutine#2-provide: 911 Test worker @coroutine#2-provide: 912 Test worker @coroutine#2-provide: 913 Test worker @coroutine#2-provide: 914 Test worker @coroutine#2-provide: 915 Test worker @coroutine#2-provide: 916 Test worker @coroutine#2-provide: 917 Test worker @coroutine#2-provide: 918 Test worker @coroutine#2-provide: 919 Test worker @coroutine#2-provide: 920 Test worker @coroutine#2-provide: 921 Test worker @coroutine#2-provide: 922 Test worker @coroutine#2-provide: 923 Test worker @coroutine#2-provide: 924 Test worker @coroutine#2-provide: 925 Test worker @coroutine#2-provide: 926 Test worker @coroutine#2-provide: 927 Test worker @coroutine#2-provide: 928 Test worker @coroutine#2-provide: 929 Test worker @coroutine#2-provide: 930 Test worker @coroutine#2-provide: 931 Test worker @coroutine#2-provide: 932 Test worker @coroutine#2-provide: 933 Test worker @coroutine#2-provide: 934 Test worker @coroutine#2-provide: 935 Test worker @coroutine#2-provide: 936 Test worker @coroutine#2-provide: 937 Test worker @coroutine#2-provide: 938 Test worker @coroutine#2-provide: 939 Test worker @coroutine#2-provide: 940 Test worker @coroutine#2-provide: 941 Test worker @coroutine#2-provide: 942 Test worker @coroutine#2-provide: 943 Test worker @coroutine#2-provide: 944 Test worker @coroutine#2-provide: 945 Test worker @coroutine#2-provide: 946 Test worker @coroutine#2-provide: 947 Test worker @coroutine#2-provide: 948 Test worker @coroutine#2-provide: 949 Test worker @coroutine#2-provide: 950 Test worker @coroutine#2-provide: 951 Test worker @coroutine#2-provide: 952 Test worker @coroutine#2-provide: 953 Test worker @coroutine#2-provide: 954 Test worker @coroutine#2-provide: 955 Test worker @coroutine#2-provide: 956 Test worker @coroutine#2-provide: 957 Test worker @coroutine#2-provide: 958 Test worker @coroutine#2-provide: 959 Test worker @coroutine#2-provide: 960 Test worker @coroutine#2-provide: 961 Test worker @coroutine#2-provide: 962 Test worker @coroutine#2-provide: 963 Test worker @coroutine#2-provide: 964 Test worker @coroutine#2-provide: 965 Test worker @coroutine#2-provide: 966 Test worker @coroutine#2-provide: 967 Test worker @coroutine#2-provide: 968 Test worker @coroutine#2-provide: 969 Test worker @coroutine#2-provide: 970 Test worker @coroutine#2-provide: 971 Test worker @coroutine#2-provide: 972 Test worker @coroutine#2-provide: 973 Test worker @coroutine#2-provide: 974 Test worker @coroutine#2-provide: 975 Test worker @coroutine#1-collect 910 Test worker @coroutine#1-collect 911 Test worker @coroutine#1-collect 912 Test worker @coroutine#1-collect 913 Test worker @coroutine#1-collect 914 Test worker @coroutine#1-collect 915 Test worker @coroutine#1-collect 916 Test worker @coroutine#1-collect 917 Test worker @coroutine#1-collect 918 Test worker @coroutine#1-collect 919 Test worker @coroutine#1-collect 920 Test worker @coroutine#1-collect 921 Test worker @coroutine#1-collect 922 Test worker @coroutine#1-collect 923 Test worker @coroutine#1-collect 924 Test worker @coroutine#1-collect 925 Test worker @coroutine#1-collect 926 Test worker @coroutine#1-collect 927 Test worker @coroutine#1-collect 928 Test worker @coroutine#1-collect 929 Test worker @coroutine#1-collect 930 Test worker @coroutine#1-collect 931 Test worker @coroutine#1-collect 932 Test worker @coroutine#1-collect 933 Test worker @coroutine#1-collect 934 Test worker @coroutine#1-collect 935 Test worker @coroutine#1-collect 936 Test worker @coroutine#1-collect 937 Test worker @coroutine#1-collect 938 Test worker @coroutine#1-collect 939 Test worker @coroutine#1-collect 940 Test worker @coroutine#1-collect 941 Test worker @coroutine#1-collect 942 Test worker @coroutine#1-collect 943 Test worker @coroutine#1-collect 944 Test worker @coroutine#1-collect 945 Test worker @coroutine#1-collect 946 Test worker @coroutine#1-collect 947 Test worker @coroutine#1-collect 948 Test worker @coroutine#1-collect 949 Test worker @coroutine#1-collect 950 Test worker @coroutine#1-collect 951 Test worker @coroutine#1-collect 952 Test worker @coroutine#1-collect 953 Test worker @coroutine#1-collect 954 Test worker @coroutine#1-collect 955 Test worker @coroutine#1-collect 956 Test worker @coroutine#1-collect 957 Test worker @coroutine#1-collect 958 Test worker @coroutine#1-collect 959 Test worker @coroutine#1-collect 960 Test worker @coroutine#1-collect 961 Test worker @coroutine#1-collect 962 Test worker @coroutine#1-collect 963 Test worker @coroutine#1-collect 964 Test worker @coroutine#1-collect 965 Test worker @coroutine#1-collect 966 Test worker @coroutine#1-collect 967 Test worker @coroutine#1-collect 968 Test worker @coroutine#1-collect 969 Test worker @coroutine#1-collect 970 Test worker @coroutine#1-collect 971 Test worker @coroutine#1-collect 972 Test worker @coroutine#1-collect 973 Test worker @coroutine#1-collect 974 Test worker @coroutine#2-provide: 976 Test worker @coroutine#2-provide: 977 Test worker @coroutine#2-provide: 978 Test worker @coroutine#2-provide: 979 Test worker @coroutine#2-provide: 980 Test worker @coroutine#2-provide: 981 Test worker @coroutine#2-provide: 982 Test worker @coroutine#2-provide: 983 Test worker @coroutine#2-provide: 984 Test worker @coroutine#2-provide: 985 Test worker @coroutine#2-provide: 986 Test worker @coroutine#2-provide: 987 Test worker @coroutine#2-provide: 988 Test worker @coroutine#2-provide: 989 Test worker @coroutine#2-provide: 990 Test worker @coroutine#2-provide: 991 Test worker @coroutine#2-provide: 992 Test worker @coroutine#2-provide: 993 Test worker @coroutine#2-provide: 994 Test worker @coroutine#2-provide: 995 Test worker @coroutine#2-provide: 996 Test worker @coroutine#2-provide: 997 Test worker @coroutine#2-provide: 998 Test worker @coroutine#2-provide: 999 Test worker @coroutine#2-provide: 1000 Test worker @coroutine#1-collect 975 Test worker @coroutine#1-collect 976 Test worker @coroutine#1-collect 977 Test worker @coroutine#1-collect 978 Test worker @coroutine#1-collect 979 Test worker @coroutine#1-collect 980 Test worker @coroutine#1-collect 981 Test worker @coroutine#1-collect 982 Test worker @coroutine#1-collect 983 Test worker @coroutine#1-collect 984 Test worker @coroutine#1-collect 985 Test worker @coroutine#1-collect 986 Test worker @coroutine#1-collect 987 Test worker @coroutine#1-collect 988 Test worker @coroutine#1-collect 989 Test worker @coroutine#1-collect 990 Test worker @coroutine#1-collect 991 Test worker @coroutine#1-collect 992 Test worker @coroutine#1-collect 993 Test worker @coroutine#1-collect 994 Test worker @coroutine#1-collect 995 Test worker @coroutine#1-collect 996 Test worker @coroutine#1-collect 997 Test worker @coroutine#1-collect 998 Test worker @coroutine#1-collect 999 Test worker @coroutine#1-collect 1000 finished -
It's unpleasant that
asFlow().buffer(0, BufferOverflow.SUSPEND).collect { ... }is not the same assubscribe { ... }, even though they look the same semantically. -
It looks like an issue that will consistently happen in testing and won't reach production, given that it only surfaces in single-threaded, deterministic scenarios, so this is not a very huge deal.
-
It's not clear how prevalent this issue is, if at all. This is the first I've heard of it, at least.
@Motoaleks not sure what a good place for mentioning this issue would be, since this knowledge is just about suspend functions and dispatchers in general and not flow-specific: https://kotlinlang.org/docs/coroutine-context-and-dispatchers.html#unconfined-vs-confined-dispatcher