Tag: 异步

在Kotlin中同时对列表中的每个元素应用变换的最佳方法

基本上我试图将一个长期运行的转换应用到Kotlin中的元素列表。 现在我正在使用.map函数,但是这会导致所有的转换顺序运行,因为我需要它们同时运行。 以下是现在的工作原理: async { val list = await { list.execute().items.map { initialValue -> getResultAfterALongTime(initialValue) }} onCompletion(list) } 正如我所解释的,函数.map运行转换,然后等待它在下一个元素之前完成。 我应该如何改变这个以允许转换同时运行,以及当这些转换完成时的过程?

使用单元测试支持清理Kotlin中的协程

一段时间以来,我们正在与Kotlin合作,而我们目前正在关注的一件事情是使用Coroutines来处理我们想要运行异步的操作。 虽然示例的用法是清楚的,这是有效的,我有一些问题整合在一个干净的方式在我们的架构。 当看一个方法的领域为焦点的类的实现,这个想法是,它很容易阅读,有尽可能少的异步功能“噪音”。 我知道我不能有异步,没有实际使用它。 所以写这样的东西是我想要的: val data = someService.getData().await() // work with data 但是这是我想要阻止的: launch(UI) { val data val job = async(CommonPool) { data = someService.getData() } job.await() // work with data } 那么,我想配对这些领域为重点的类的实际单元测试,但我真的不能得到这个工作。 我们来看一个例子: // Some dependency doing heavy work class ApiClient { suspend fun doExpensiveOperation(): String { delay(1000) return "Expensive Result Set" } […]

如何:在Kotlin中启动并忘记异步协程

我一直在阅读Kotlin的例程,但没有找到具体问题的答案。 假设我想迭代一个集合,为每个元素进行API调用(在这种情况下,将文件推送到Amazon S3)。 我希望这些调用被异步协程处理,以免在等待时阻塞底层线程。 我不需要从请求返回值,只是为了记录异常。 我将如何创建一个“消防和忘记”异步协程来做出这些请求之一?

异步春季启动使用Kotlin无法正常工作

我正在尝试创建一个异步执行操作的Spring服务,并返回一个ListenableFuture 。 我希望在操作失败时触发失败回调 – 我尝试这样做是使用AsyncResult.forExecutionException ,如下所示: @Service open class UserClientService { @Async fun fetchUser(email: String): ListenableFuture<User> { val uri = buildUri(email) val headers = buildHeaders() try { val result = restTemplate.exchange(uri, HttpMethod.GET, HttpEntity<Any>(headers), User::class.java) return AsyncResult.forValue(result.body) } catch (e: RestClientException) { return AsyncResult.forExecutionException(e) } } } 入门点: @SpringBootApplication @EnableAsync open class UserProxyApplication fun main(args: Array<String>) […]

如何使用Kotlin异步并等待阶乘?

我在Kotlin(Android应用程序)中有这个功能: tailrec fun factorial(n: BigInteger, remainder: BigInteger = BigInteger.ONE) : BigInteger{ if(n== BigInteger.ZERO) return remainder else { return factorial(n – BigInteger.ONE, remainder * n) } } 和这个简单的代码: button.setOnClickListener { val n = editTextT.text.toString() val result: BigInteger = factorial(BigInteger(n)) textView.text = "$n! is $result" } 我的问题是:有没有办法以异步的方式做这种计算? 如果是的话,怎么样?

Java vs Kotlin – 同一个类中的Spring @Async方法

我发现在Java中,当您尝试从同一个类中调用@Async方法时,您实际上在同一个线程中运行方法,但是在Kotlin中它以异步方式运行。 看起来像代理包装工作不同。 例: @Service class BasicService { @Scheduled(fixedRate = 1000) fun asyncCall() { log.info("Async call") doAsync() } @Async("myAsyncExecutor") open fun doAsync() { log.info("DO ASYNC AND SLEEP. Thread: ${Thread.currentThread().name}") Thread.sleep(7000) log.info("Finsh async call") } … } 当您使用Kotlin doAsync()通过myAsyncExecutor异步运行时, myAsyncExecutor在Java中运行在相同的线程上,并且调度器将每7秒等待一次,然后再次启动。 那么科特林如何解决这个问题呢?

Kotlin / anko多个异步任务

我正在寻找一种简单的方法来并行启动多个任务,并等待所有这些完成。 考虑这个C#的例子: private static void Main(string[] args) { var urlList = new[] {"http://www.microsoft.com/", "http://www.google.com/", "http://www.apple.com/" }; var result = GetHtml(urlList); } private static List<string> GetHtml(string[] urlList) { var tasks = new List<Task>(); var output = new List<string>(); foreach (var url in urlList) { var task = new Task(() => { var html = new WebClient().DownloadString(url); […]