2017-11-16 8 views
1

私は今日AndroidでKotlinコルーチンを使い始めました。そして、私は、Ankoが独自のヘルパーメソッドを持っていることに気付きました。私はなぜasReference()が存在するのか理解していますが、なぜbg()が、コアコルーチンのlibにはすでにasync()があるのか​​わかりません。AndroidのKotlinコルーチン:async()の代わりにAnkoのbg()を使用する理由

bg()コードは非常に簡単であり、それはasync()内部を使用しています。

@PublishedApi 
internal var POOL = newFixedThreadPoolContext(2 * Runtime.getRuntime().availableProcessors(), "bg") 

inline fun <T> bg(crossinline block:() -> T): Deferred<T> = async(POOL) { 
    block() 
} 

のでbg()代わりのasync()を使用する利点は何ですか? async()はAndroidアプリのために何らかの形で非効率的ですか?

答えて

2

ご覧のとおり、bgは、CoroutineDispatcherとしてPOOLを使用しています。詳しくは、hereを参照してください。

基本的にこの機能は、これらのタスクが実行されるプールをラップするためにのみ存在します。 asyncを直接使用する場合は、提供する必要があります。したがって、最後にbgで開始された各タスクは、同じプール内で実行されることが保証されます。

+0

Answer @ s1m0nw1のおかげで、 'async'はプールを提供する必要はありません。オプションで' CommonPool'をデフォルトで使用していますので、 'bg'の利点は何ですか?プール? – Franco

+0

はい、あなたは 'CommonPool'を制御できません、そうですか?たぶん、 'POOL'は何らかの形で制御される必要があります。それで、彼らは 'bg'で使われているプールインスタンスを定義しています。 – s1m0nw1

+0

あなたは"多分 "私はそれがあなたの側の推測だと思ったので@ s1m0nw1。私はすでにコードから別のプールを使用していることを知ることができました。その理由を説明できるように質問を投稿しました。もう一度お返事ありがとうございますが、私は 'bg'を使用する正当な理由があるかどうか、その理由をもっと具体的に知る必要があります。 – Franco

0

bgを使用する利点はないと私は考えています。 Plus Ankoは古いバージョンのkotlinxコルーチンライブラリにあなたを結びつけているので、私はそれを使用しても構いません。

+0

あなたの答えをありがとう、残念ながら、これは私の質問に答えていない、私は現在とにかくそれを使用していない、私はちょうどそこに利点があるかどうかを知ることに興味があると理由'bg'は作成されませんでした。あなたの意見を述べたいときは、答えではなくコメントとしてそれを加えるべきです。 – Franco

関連する問題