代码之家  ›  专栏  ›  技术社区  ›  ankuranurag2

如果两个不同的异步回调启动两个不同的同步方法,会发生什么情况?

  •  -1
  • ankuranurag2  · 技术社区  · 6 年前

    假设我有两个不同的api(让api1&api2)。当API1的响应到达时,我调用一个同步方法 foo1() 是的。类似地,当API2的响应到达时,我调用另一个同步方法 foo2() 是的。情况是这样的——我同时调用这两个api。API1到达的响应和方法 食物1() 被称为。同时,API2也给出了响应和方法 食物2() 被调用。

    我的问题是处决的顺序是什么?威尔 食物2() 等待 食物1() 完成还是视差执行?

    1 回复  |  直到 6 年前
        1
  •  0
  •   ankuranurag2    6 年前

    我自己也试过了,多亏了“Droidev”。我用过 Anko library 对于异步任务。下面是代码:

      doAsync {
            Log.d("ASYNC", "Async A started")
            foo1()
            uiThread {
                Log.d("ASYNC", "Async A done")
            }
        }
    
        Thread.sleep(1000)
    
        doAsync {
            Log.d("ASYNC", "Async B started")
            foo2()
            uiThread {
                Log.d("ASYNC", "Async B done")
            }
        }
    }
    
    fun foo1() {
        Log.d("ASYNC", "foo1() called")
        Thread.sleep(3000)
        Log.d("ASYNC", "foo1() done")
    }
    
    fun foo2() {
        Log.d("ASYNC", "foo2() called")
        Log.d("ASYNC", "foo2() done")
    }
    

    这是我得到的结果/日志:

    07-12 11:44:55.195 23990-24054/gemini.com.jetpack D/ASYNC: Async A started
    foo1() called
    07-12 11:44:56.195 23990-24028/gemini.com.jetpack D/ASYNC: Async B started
    foo2() called
    07-12 11:44:56.205 23990-24028/gemini.com.jetpack D/ASYNC: foo2() done
    07-12 11:44:56.215 23990-23990/gemini.com.jetpack D/ASYNC: Async B done
    07-12 11:44:58.195 23990-24054/gemini.com.jetpack D/ASYNC: foo1() done
    07-12 11:44:58.205 23990-23990/gemini.com.jetpack D/ASYNC: Async A done
    

    因此,方法foo2()不会等待foo1()完成。