我正在尝试理解kotlin协程,我来自C#,在kotlin中有一些我不理解的地方。在这种情况下,我正在使用Qukus框架中的静态编程语言编写一个webapi。从我可以看出,如果我将控制器(或资源)函数标记为挂起函数,Qukus将自动在协程中启动它。
我的问题是,我不知道挂起该协程的首选方法是什么。我在kotlin协程上看到的绝大多数示例都使用delay()函数,该函数在内部使用suspendCancelable协程()来挂起该函数。这是有道理的,但我没有看到很多显式调用SuspendCancelableCoroutine()的示例。我已经阅读了一些在挂起函数中生成的底层代码,一些参考资料让我相信,通过调用另一个挂起函数,我将达到挂起点,这将挂起我的协程。在C#中,我通常只从异步函数内部调用await()来html" target="_blank">执行长时间运行的代码。
在我的kotlin设置中,我设置了一个jmeter实例,并模拟了5个线程同时调用我的API,同时将我的程序限制在quarkus中的一个线程上运行。然后,我的API调用另一个API(从现在开始,我将调用那个API,data API),这可能是一个长时间运行的操作。为了测试的目的,我的数据API有1秒钟的睡眠时间。
基本上:
web api控制器-
我尝试在调用数据API时调用async/await,这似乎很有效,JMeter报告说,5个请求都在大约1秒内完成,我的日志记录表明,所有5个请求均在单个线程上处理。但这感觉很笨重。我已经在一个协程中,现在我的协程正在创建一个新的协程(async是协程生成器),以执行长时间运行的函数。
我还删除了async/wait并将对数据API的调用更新为挂起函数(尽管这是从resteish客户端生成的客户端)。这似乎也有效,但restethy reactive可能正在为我生成一些正在执行挂起的东西。我需要使用一个更简单的示例,但同时...
如果我没有在静态编程语言中使用延迟()函数,并且我在协程中执行代码,那么指示一段代码可能被阻塞并且我的协程应该暂停的首选方法是什么?我是否启动了一个新的协程?调用SusendCensableCoroutine()?或者其他什么?可能想得太多了,但我想确保我理解了这一点。
协程库提供了几个挂起函数,可用于在协程或其他挂起函数中挂起,其中包括:
与上下文
延迟
协同路由范围
监督镜
suspendCoroutine
SuspendCancelableCorroutine
作业。加入
延迟。等待
将阻塞(长时间运行的同步)代码转换为可以在协程中使用的代码的典型方法是将其包装在 withContext(Dispatchers.Default) { }
或 withContext(Dispatchers.IO) { }
中。如果它是你反复使用的东西,你可以为它编写一个挂起函数:
suspend fun foo() = withContext(Dispatchers.IO) {
blockingFoo()
}
但是,如果它是一些一次性的阻塞代码块,则可以直接在协程中使用withContext
。
注意,使用<code>异步{}。wait()基本上从未完成。编译器警告您不要这样做。您应该改用<code>与context<code>一起使用。当一个协程需要来自已传递给它的其他协程的结果时,或者当您在一个<code>协程作用域
将基于异步回调的代码转换为挂起函数以便您可以在协程中同步使用它的典型方法是使用SusendCoroutine
或SusendCensableCoroutine
。您可以查找如何使用这些。它们是非常低级别的。许多库,如Retrofit和Firebase已经提供了您可以使用的挂起函数来代替回调。
< code>coroutineScope和< code>supervisorScope用于在您的协同程序中创建一个作用域,以便并行运行多个子协同程序并等待它们全部运行。
问题内容: 好吧,我试图理解并阅读可能导致它的原因,但我却无法理解: 我的代码中有这个地方: 事实是,当它尝试调用某些方法时,它将引发而不是其他预期的异常(特别是)抛出 。我实际上知道调用了什么方法,所以我直接转到该方法代码,并为应该抛出的行添加了一个块 ,它实际上按预期抛出。然而,当它上升时,以某种方式更改了上面的代码并没有 按预期进行。 是什么原因导致这种行为的?我该如何检查? 问题答案: 通
我不确定这是否导致了问题,但我尝试使用chown命令将所有权/组更改为root:root,但这不起作用。
问题内容: 即使模型类中没有验证约束,我也会收到此错误(所有成员变量均已正确设置,但我在创建对象时仍然遇到此异常)。如何调试此错误? 问题答案: 每个都有一个数组。每个显示了您要保留的bean的哪个属性被侵犯。正如@Arthur正确指出的那样,违反Java持久性注释的结果也以s 结尾。 要调试你的问题,我会暂时赶在并打印出每个如下:
我正在阅读Kotlin Coroutine并且知道它是基于函数的。但是是什么意思呢? Coroutine或函数挂起? 摘自https://kotlinlang.org/docs/reference/coroutines.html 哪一个被停职了? 摘自https://kotlinlang.org/docs/reference/coroutines.html 为了继续类比,await()可以是一个挂
你好,我有一个用Kotlin编写的应用程序,它使用Spring Boot框架和Apache Camel:https://camel.Apache.org/components/latest/smpp-component.html#_spring_boot_auto_configuration 所以我是Smpp协议的新手,我正在尝试连接到SMC模拟器,所以我想我的“客户机”应该在等待来自SMC的消息
我有7个不同的java守护进程,我在3个不同的服务器上运行(全部7个)。java命令行具有-Xmx2048m和-Xss1024k。在这3台服务器上,所有21个进程的顶部和顶部的VIRT大小都略低于2.5 GB。根据守护进程的不同,RES大小从300到1.9 GB不等。 这一切都是应该的。 输入新服务器。更快的CPU、更多的RAM(16 GB而不是8 GB)、稍新的java(旧服务器上为1.6.0_