"부적절한 차단 방법 호출"을 적절하게 만드는 방법은 무엇입니까?


29

나는 현재 kotlin 코 루틴을 더 활용하려고합니다. 그러나 나는 문제에 직면했다 :이 코 루틴에서 moshi 또는 okhttp를 사용할 때 경고가 발생합니다.

"부적절한 차단 방법 호출"

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 나는 정말로 부적절하고 싶지 않다 ;-)


경고를 표시하고 싶지 않다고 가정합니까?
Saeed Entezari

답변:


12

경고는 현재 스레드를 차단하고 코 루틴을 올바르게 중단 할 수없는 방법에 관한 것입니다. 이렇게하면 코 루틴의 모든 이점을 잃고 스레드 당 한 작업으로 다시 다운 그레이드 할 수 있습니다.

각 사례는 다른 방식으로 처리해야합니다. 일시 중단 가능한 http 호출의 경우 ktor http client를 사용할 수 있습니다 . 그러나 경우에 따라 라이브러리가 없으므로 자체 솔루션을 작성 하거나이 경고를 무시할 수 있습니다.


20
경고를 무시하는 것은 거의 올바른 일이 아닙니다. 적어도에서 차단 코드를 실행할 수 있습니다 withContext(Dispatchers.IO).
Marko Topolnik

2
차단 코드를 실행하면 withContext(Dispatchers.IO)더 이상 차단되지 않고 경고가 올바르지 않습니다.
noloman

@noloman 좋은 질문은 "적어도"이 질문을하는 누군가가 가지고 있지 않은 지식을 가정하기 때문입니다. 이 래퍼를 도입해도 여전히 경고가 사라지지 않습니다.
Alex

14

@Throws(IOException::class)(Kotlin 1.3.61)로 주석이 달린 일시 중단 함수를 호출 할 때도이 경고가 표시됩니다 . 그 의도인지 확실하지 않습니다. 어쨌든 해당 주석을 제거하거나 클래스로 변경하여이 경고를 해결할 수 있습니다 Exception.


정적 분석기는 IOException을 던지는 방법이 일반적으로 차단되고 완료하는 데 약간의 시간이 걸리기 때문에 강조 표시한다고 가정합니다.
이반 샤프란

: 나는 IOException이 도움에 대한이 설명 발견 discuss.kotlinlang.org/t/...
이반 Shafran을
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.