2017-11-16 8 views
1

오늘 안드로이드에서 코 틀린 코 루틴을 사용하기 시작했습니다. 그리고 저는 Anko가 그들 자신을위한 도우미 세트를 가지고 있다는 것을 알게되었습니다. 나는 왜 asReference()이 존재하는지 이해하지만, bg()이 왜 핵심 coroutines 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

보시다시피, bgCoroutineDispatcher으로 POOL을 사용합니다.이 부분은 here입니다.

기본적으로이 기능은 이러한 작업이 실행되는 풀을 래핑하는 용도로만 사용됩니다. async을 직접 사용하려면 직접 제공해야합니다. 따라서 결국 bg을 통해 시작된 각 작업은 동일한 풀에서 실행되도록 보장됩니다.

+0

답변을 주셔서 감사합니다. @ as1m0nw1 그러나 'async'는 풀을 제공 할 필요가 없습니다. 선택 사항이며 기본적으로'CommonPool'을 사용합니다. 그래서'bg'의 장점은 다른 풀? – Franco

+0

네,하지만'CommonPool'에 대한 통제권이 없습니다, 맞습니까? 어쩌면'POOL'이 어떤 방식 으로든 통제 될 필요가 있을지도 모른다. 그래서 그들 자신이'bg'에서 사용되는 자신의 풀 인스턴스를 정의합니다. – s1m0nw1

+0

"아마"내가 말한 것은 당신 쪽에서 @ s1m0nw1이 맞다고 생각하기 때문입니다. 나는 그들이 다른 수영장을 사용한다는 코드에서 이미 볼 수 있었고 누군가가 왜 그런지 설명 할 수 있도록 질문을 게시했습니다. 다시 한 번 해답을 주셔서 감사합니다. 그러나 'bg'를 사용하는 데는 이유가 있는지, 그 이유는 무엇인지에 대한 구체적인 정보가 필요합니다. – Franco

0

bg을 사용하면 어떤 이점도 있다고 생각하지 않습니다. Anko는 kotlinx coroutine 라이브러리의 이전 버전과 연결시켜 주므로 사용하지 않아도됩니다.

+0

답변을 주셔서 감사합니다. 불행히도 내 질문에 답변이되지 않습니다. 현재 사용하지 않고 있습니다. 장점이 있는지 없는지, 이유가 있는지 만 알고 싶습니다. 'bg '가 없으면 만들어졌습니다. 의견을 제시하고자 할 때는 대답이 아닌 의견으로 추가해야합니다. – Franco