如果该方法包含需要处理的参数,则递归调用异步方法是否安全?
public async Task<bool> ConnectAsync(CancellationTokenSource cancellationTokenSource)
{
using CancellationTokenSource token = new CancellationTokenSource();
await ConnectAsync(token).ConfigureAwait(false);
}
如果该方法包含需要处理的参数,则递归调用异步方法是否安全?
public async Task<bool> ConnectAsync(CancellationTokenSource cancellationTokenSource)
{
using CancellationTokenSource token = new CancellationTokenSource();
await ConnectAsync(token).ConfigureAwait(false);
}
这是安全的,因为该控件将始终返回到创建它的方法的实例。所以只要你:
using
语句或手动调用Dispose()
,并且await
通话然后该对象将被正确处置,而不是在使用之前。
但是,与所有递归一样,您需要注意不要以stack overflow结尾。就像您编写的那样,该方法将最终导致堆栈溢出。
,是的,在使用using语句的C#递归中是安全的,当被调用方的执行终止并且代码返回给调用方时,该对象将被正确处理。
但是据我了解,您想要无限递归,在那种情况下该对象将永远不会被处置,不是因为您的代码不安全,根本就不可能处置该对象。
无论如何,问题在于您无法进行无限递归,不久或之后您将处理堆栈溢出,c#不支持尾部优化,因此C#不支持无限递归。