在某些示例/说明中,开发人员在暂挂方法内部调用暂挂方法。为什么?
我知道您不能在启动或其他暂挂方法之外调用暂挂方法,但是为什么要在暂挂内将其暂挂?内存问题?更多的线程会更好地管理内存吗?
感谢您的任何输入
答案 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)
因此,有时您最终会在另一个暂停函数中调用暂停函数。