Jak ustawić „nieodpowiednie wywołanie metody blokowania”?


29

Obecnie próbuję bardziej wykorzystać kotlin coroutines. Ale mam problem: kiedy używam moshi lub okhttp w tych koronach, dostaję ostrzeżenie:

„nieodpowiednie wywołanie metody blokowania”

Jak najlepiej to naprawić? Naprawdę nie chcę być nieodpowiednia ;-)


Zakładam, że nie chcesz ukryć ostrzeżenia, prawda?
Saeed Entezari

Odpowiedzi:


12

Ostrzeżenie dotyczy metod, które blokują bieżący wątek i nie można poprawnie zawiesić coroutine. W ten sposób tracisz wszystkie zalety korupcji i ponownie obniżasz do jednego zadania na wątek.

Każda sprawa powinna być traktowana w inny sposób. Do zawieszanych połączeń http można użyć klienta ktor http . Ale czasami nie ma biblioteki dla twojej sprawy, więc możesz napisać własne rozwiązanie lub zignorować to ostrzeżenie.


20
Ignorowanie ostrzeżenia prawie nigdy nie jest właściwe, możesz przynajmniej uruchomić kod blokujący withContext(Dispatchers.IO).
Marko Topolnik

2
jeśli uruchomisz kod blokujący withContext(Dispatchers.IO), to nie będzie już blokował, a ostrzeżenie nie będzie poprawne, prawda?
noloman

@noloman dobre pytanie, ponieważ „przynajmniej” zakłada wiedzę, której nie ma ktoś, kto zadaje to pytanie. Jednak ostrzeżenie nie zniknie po wprowadzeniu tego opakowania.
Alex

14

To ostrzeżenie pojawia się także podczas wywoływania funkcji wstrzymującej z adnotacją @Throws(IOException::class)(Kotlin 1.3.61). Nie jestem pewien, czy jest to zamierzone, czy nie. W każdym razie możesz naprawić to ostrzeżenie, usuwając adnotację lub zmieniając ją na Exceptionklasę.


Nazwijmy to tłumieniem, a nie naprawianiem :) Podejrzewam, że analizator statyczny podkreśla to, ponieważ metoda, która wyrzuca wyjątek IOException, zwykle blokuje i zajmuje trochę cennego czasu.
Ivan Shafran

Uważam, że to wyjaśnienie dotyczące wyjątku
Ivan
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.