具有一次性参数和异步等待的C#递归

如果该方法包含需要处理的参数,则递归调用异步方法是否安全?

public async Task<bool> ConnectAsync(CancellationTokenSource cancellationTokenSource)
{
    using CancellationTokenSource token = new CancellationTokenSource();
    await ConnectAsync(token).ConfigureAwait(false);
}
wmq890614 回答:具有一次性参数和异步等待的C#递归

这是安全的,因为该控件将始终返回到创建它的方法的实例。所以只要你:

  1. 使用using语句或手动调用Dispose(),并且
  2. await通话

然后该对象将被正确处置,而不是在使用之前。

但是,与所有递归一样,您需要注意不要以stack overflow结尾。就像您编写的那样,该方法将最终导致堆栈溢出。

,

是的,在使用using语句的C#递归中是安全的,当被调用方的执行终止并且代码返回给调用方时,该对象将被正确处理。

但是据我了解,您想要无限递归,在那种情况下该对象将永远不会被处置,不是因为您的代码不安全,根本就不可能处置该对象。

无论如何,问题在于您无法进行无限递归,不久或之后您将处理堆栈溢出,c#不支持尾部优化,因此C#不支持无限递归。

本文链接:https://www.f2er.com/3136946.html

大家都在问