Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ObservableSource.asFlow() blocks the singleThreadContext/Dispatchers.Main on android, if the default buffer is exceeded #3282

Open
Motoaleks opened this issue May 12, 2022 · 4 comments
Labels

Comments

@Motoaleks
Copy link

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.

@Motoaleks Motoaleks changed the title ObservableSource.asFlow() blocks the singleThreadContext/Dispatchers.Main on android, if default buffer is exceeded ObservableSource.asFlow() blocks the singleThreadContext/Dispatchers.Main on android, if the default buffer is exceeded May 12, 2022
@dkhalanskyjb
Copy link
Collaborator

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.

@vganin
Copy link

vganin commented May 13, 2022

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.

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?

@Motoaleks
Copy link
Author

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.

@dkhalanskyjb
Copy link
Collaborator

@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.immediate will 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 as subscribe { ... }, 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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants