挂起函数中的挂起函数

时间:2019-09-04 14:35:27

标签: kotlin kotlin-coroutines

在某些示例/说明中,开发人员在暂挂方法内部调用暂挂方法。为什么?

我知道您不能在启动或其他暂挂方法之外调用暂挂方法,但是为什么要在暂挂内将其暂挂?内存问题?更多的线程会更好地管理内存吗?

感谢您的任何输入

3 个答案:

答案 0 :(得分:1)

问题和陈述似乎有些倒退。让我们尝试解决这个问题。

如果方法阻塞,您想将其标记为可挂起。这是Kotlin编译器的指令,用于重写标有suspend作为继续的方法之后的所有内容。

这又可以实现更好的并发性。当您的方法阻塞时,继续操作将被挂起,并且同一线程可以执行其他任务。

将方法标记为suspend不会影响内存占用或Kotlin运行时使用的线程数量。

答案 1 :(得分:1)

suspend关键字只是一个函数可以被阻塞的指示。除了确保编译器知道只能在协程的根调用它之外,它本质上不会做任何事情。

意味着必须使用 For i = 0 To DT.Rows.Count - 1 StrHtml = String.Format("{0}<tr>", StrHtml) StrHtml = String.Format("{0}<td colspan=""2"">{1}</td>", StrHtml, DT.Rows(i).Item("Decsription")) StrHtml = String.Format("{0}<td colspan=""2"">{1}</td>", StrHtml, DT.Rows(i).Item("Condition")) StrHtml = String.Format("{0}<td >{1}</td>", StrHtml, DT.Rows(i).Item("Result_")) StrHtml = String.Format("{0}<td >{1}</td>", StrHtml, DT.Rows(i).Item("Type_")) StrHtml = String.Format("{0}<td >{1}</td>", StrHtml, DT.Rows(i).Item("PS_ID_Redirect")) StrHtml = String.Format("{0}<td >{1}</td>", StrHtml, DT.Rows(i).Item("TPL_Discount")) StrHtml = String.Format("{0}<td >{1}</td>", StrHtml, DT.Rows(i).Item("Hub_Redirect")) If i = 0 Then StrHtml = String.Format("{0}<td class=""HashirUp""><img class=""btn_img"" src=""../icon/up.png"" title=""Can not move up, already first""/></td>", StrHtml, DT.Rows(i).Item("Order_")) Else StrHtml = String.Format("{0}<td class=""HashirUp""><img class=""btn_img "" src=""../icon/up.png"" title=""Move up the order""/></td>", StrHtml, DT.Rows(i).Item("Order_")) End If If i = DT.Rows.Count - 1 Then StrHtml = String.Format("{0}<td class=""HashirDown""><img class=""btn_img"" src=""../icon/down.png"" title=""Can not move down, already last""/></td>", StrHtml, DT.Rows(i).Item("Order_")) Else StrHtml = String.Format("{0}<td class=""HashirDown""><img class=""btn_img "" src=""../icon/down.png"" title=""Move down the order""/></td>", StrHtml, DT.Rows(i).Item("Order_")) End If StrHtml = String.Format("{0}<td class=""edit up""><a href=""#"" onclick=""Get_Price_Key_IU('{1}');"">Edit</a></td>", StrHtml, DT.Rows(i).Item("PS_ID")) StrHtml = String.Format("{0}<td class=""delete up""><a href=""#"" onclick=""Del_Price_Key('{1}');"">Delete</a></td>", StrHtml, DT.Rows(i).Item("PS_ID")) StrHtml = String.Format("{0}</tr>", StrHtml) Next StrHtml = String.Format("{0}</table>", StrHtml) Return StrHtml launch等开始一系列挂起功能。

答案 2 :(得分:1)

编写暂挂函数时,您并不知道可以使用它的所有位置,就像您对常规函数不了解那样。 您只知道执行需要时间,因此需要在协程中调用它(即标记为suspend)

因此,有时您最终会在另一个暂停函数中调用暂停函数。