kotlin вложенных потоков - «в этой области более одной метки с таким именем» - PullRequest
1 голос
/ 16 января 2020

У меня есть код kotlin, похожий на этот:

Thread {
    ...
    Thread {
        ...
        return@Thread
        ...
    }.start()
    ...
}.start()

Теперь я получаю следующее предупреждение:

enter image description here

Я понимаю, что kotlin сбит с толку относительно того, какой поток я хочу вернуть в данный момент, будь то внешний или внутренний поток. Но я не уверен, как это сказать, и Android Studio тоже мало чем поможет, поскольку предлагает только изменить параметры этого предупреждения:

enter image description here

Я попытался назвать имя потока и подумал, что, возможно, kotlin достаточно умен, чтобы проверить это, но я думаю, что это может быть невозможно, поскольку метка возврата, вероятно, не интерпретируется во время выполнения.

Я понимаю, что могу просто экспортировать внутренний поток в функцию и тем самым сделать так, чтобы потоки не мешали друг другу, например:

Thread {
    ...
    startInnerThread()
    ...
}.start()

fun startInnerThread() {
    Thread {
        ...
        return@Thread
        ...
    }.start()
}

Но я хотел бы знать, возможно ли каким-либо образом изменить метку @Thread для одного из них.

1 Ответ

4 голосов
/ 16 января 2020

Да, вы можете сделать это, пометив функцию для возврата следующим образом:

Thread {

    Thread Foo@ {

        return@Foo

    }.start()

}.start()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...