“Uygunsuz engelleme yöntemi çağrısı” nasıl uygun hale getirilir?


29

Şu anda kotlin coroutinlerinden daha fazla yararlanmaya çalışıyorum. Ama bir sorunla karşılaşıyorum: Bu coutinler içinde moshi veya okhttp kullanırken bir uyarı alıyorum:

"uygunsuz engelleme yöntemi çağrısı"

Bunları düzeltmenin en iyi yolu nedir? Gerçekten uygunsuz olmak istemiyorum ;-)


Sanırım uyarıyı bastırmak istemiyorsun, değil mi?
Saeed Entezari

Yanıtlar:


12

Uyarı, geçerli iş parçacığı ve yardımcı programı düzgün bir şekilde askıya alınamayacak yöntemlerle ilgilidir. Bu şekilde, programların tüm avantajlarını kaybedersiniz ve iş parçacığı başına tekrar bir işe geri dönersiniz.

Her dava farklı bir şekilde ele alınmalıdır. Askıya alınabilen http çağrıları için ktor http istemcisini kullanabilirsiniz . Ancak bazen durumunuz için bir kütüphane yoktur, bu nedenle kendi çözümünüzü yazabilir veya bu uyarıyı göz ardı edebilirsiniz.


20
Uyarıyı görmezden gelmek neredeyse hiçbir zaman doğru şey değildir, en azından engelleme kodunu çalıştırabilirsiniz withContext(Dispatchers.IO).
Marko Topolnik

2
engelleme kodunu ile çalıştırırsanız, withContext(Dispatchers.IO)artık engelleme yapmaz ve uyarı doğru değildir, değil mi?
noloman

@noloman iyi soru çünkü "en azından" bu soruyu soran birinin sahip olmadığı bilgisini varsayar. Bu sarmalayıcıyı tanıttığınızda uyarı yine de kaybolmaz.
Alex

14

Bu uyarıyı, açıklama eklenmiş bir askıya alma işlevini çağırırken de alırsınız @Throws(IOException::class)(Kotlin 1.3.61). Bunun amaçlanıp amaçlanmadığından emin değilim. Her neyse, bu açıklamayı kaldırarak veya sınıfa değiştirerek bu uyarıyı düzeltebilirsinizException .


Diyelim, sabitleme değil bastırmak diyelim :) Sanırım, statik analizör vurgulamaktadır çünkü IOException fırlatma yöntemi genellikle engelleme ve bitirmek için değerli zaman alır.
Ivan Shafran

IOException hakkındaki bu açıklamayı yararlı buldum: tartış.kotlinlang.org/t/…
Ivan Shafran
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.