-1

假设我有两个不同的 api(让 api1 和 api2)。当 api1 的响应到达时,我调用了一个同步方法foo1()。同样,当 api2 的响应到达时,我调用另一个同步方法foo2()。情况是这样的——我同时调用了这两个 API。api1 的响应到达并foo1()调用方法。同时,来自 api2 的响应也到达并foo2()调用该方法。

我的问题是执行顺序是什么?foo2()是等待foo1()完成还是并行执行?

4

1 回答 1

0

好吧,我自己试过了,感谢@DroiDev。我将Anko用于异步任务。代码如下:

  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() 完成。

于 2018-07-12T06:21:32.393 回答