如何:在Kotlin中解雇并忘记异步协同程序

时间:2017-06-27 14:35:16

标签: asynchronous kotlin coroutine

我一直在阅读Kotlin的惯例,但我找不到特定问题的答案。

假设我想迭代一个集合,为每个元素进行API调用(在这种特殊情况下,将文件推送到Amazon S3)。我希望这些调用由异步协程处理,以免在等待时阻塞底层线程。

我不需要请求中的返回值,只需记录异常。

我如何制作一个“即发即忘”的异步协程来发出其中一个请求?

2 个答案:

答案 0 :(得分:2)

可能kotlinx.coroutines#launchkotlinx.coroutines#async符合您的需求。例如:

launch(CommonPool) {
    for(item in collection){
      val result = apiCall(item);
      log(result);
    }
}

for(item in collection){
    launch(CommonPool) {
      val result = apiCall(item)
      log(result)
    }
}

答案 1 :(得分:0)

请注意,如果尚不存在特定的协程范围(即没有挂起函数),则可以使用:

fun Process (item: String): Response {
    GlobalScope.launch {
       ... <YOUR ASYNC (Processing) CODE GOES HERE> ...
    }
    ... <YOUR SYNC CODE GOES HERE> ...
    return Response("Your request for $item is being processed...")
}

通过这种方式,您可以以即兴即忘的方式返回快速答复(作为确认),说明已收到并正在处理它,而不会阻塞客户/消费者。