2

我这里有一些愚蠢的代码

Async Function GetCoolNumber() As Task(Of Double)
    Dim n = Await GetNumberFromSomeAsyncSource()
    If IsCool(n) Then
        Return n
    End If
    Return Await GetCoolNumber()
End Function

Private Function GetNumberFromSomeAsyncSource() As Task(Of Double)

Private Function IsCool(n As Object) As Boolean

现在递归工作正常,我得到了我想要的结果。当然,我的真实代码更复杂。然而,这被认为是不好的做法吗?

如果我以这种方式进行无限递归会怎样?有什么东西会吹吗?我的直觉是,我会继续将任务转储到堆上,而不是炸毁我的堆栈。

4

1 回答 1

1

我倾向于避免 .NET 中的正常递归;对尾调用优化的支持存在一些差异,所以我只是作为一般规则避开。

使用async,你可能会因为重写而没问题;您可以使用 dotPeek / JustDecompile 确定。

IMO 最好避免依赖未记录的功能。因此,如果重写是正式记录的(例如,VB.NET 语言标准),那么我会说它很好。否则,我会迭代地编写它。

于 2012-10-10T14:13:29.643 回答