「不適切なブロッキングメソッドの呼び出し」を適切にする方法


29

私は現在、コトリンコルーチンをさらに活用しようとしています。しかし、私は問題に直面します。これらのコルーチン内でmoshiまたはokhttpを使用すると、警告が表示されます。

「不適切なブロッキングメソッドの呼び出し」

これらを修正する最良の方法は何ですか?私は本当に不適切になりたくありません;-)


警告を抑制したくないと思いますか?
Saeed Entezari、

回答:


12

警告は、現在のスレッドをブロックするメソッドに関するものであり、コルーチンは適切に中断できません。このようにして、コルーチンのすべての利点を失い、再びスレッドごとに1つのジョブにダウングレードします。

それぞれのケースは異なる方法で処理する必要があります。一時停止可能なhttp呼び出しの場合、ktor httpクライアントを使用できます。しかし、場合によってはライブラリが存在しない場合があるため、独自のソリューションを作成するか、この警告を無視できます。


20
警告を無視することはほとんど正しいことではありませんwithContext(Dispatchers.IO)。少なくともブロックコードをで実行できます。
Marko Topolnik

2
あなたがブロッキングコードを実行するとwithContext(Dispatchers.IO)、それはもはやブロッキングされておらず、警告は正しくありませんよね?
noloman

「少なくとも」この質問をしている誰かが持っていない知識を前提としているため、@ noloman良い質問。それでも、このラッパーを導入しても警告は消えません。
アレックス

14

@Throws(IOException::class)(Kotlin 1.3.61)で注釈が付けられた一時停止関数を呼び出すときにもこの警告が表示されます。それが意図されているかどうかはわかりません。とにかく、その注釈を削除するか、それをクラスに変更することで、この警告を修正できますException


修正ではなく抑制と呼びましょう:)静的アナライザーが強調表示すると思います。IOExceptionをスローするメソッドは通常ブロックしていて、終了するのに貴重な時間がかかるためです。
Ivan Shafran

私はこのIOExceptionについての説明が役に立ったと感じました。discuss.kotlinlang.org
Ivan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.