Azure LinearRetry - 参数retryInterval必须声明为' value'错误

时间:2015-04-17 02:38:08

标签: c# azure lambda delegates

//这是我宣布的

internal delegate Func<Func<int, Exception, TimeSpan, bool>> RetryPolicy();

public static RetryPolicy LinearRetry(int retryCount, TimeSpan intervalBetweenRetries)
        {
            return () =>
            {
                return (int currentRetryCount, Exception lastException, out TimeSpan retryInterval) =>
                {
                    // Do custom work here               
                    // Set backoff
                    retryInterval = intervalBetweenRetries;
                    // Decide if we should retry, return bool
                    return currentRetryCount < retryCount;

                };
            };
        }

这是a linear retry mechanism implemented in Azure

我不明白这种语法。它应该接受void并返回一个接受3个参数并返回bool的委托但是我得到这个错误我得到参数retryInterval必须声明为'value'错误。

1 个答案:

答案 0 :(得分:0)

错误是因为您在委托类型与实际返回的内容之间存在不匹配。如果您要使用out,则无法使用Func,您需要自定义委托类型。 (如果我忽略了out问题,您的代码仍然无效,因为应该只有一个Func。)

根据您链接的文章,RetryPolicy委托应返回ShouldRetry委托,因此我将其称之为。使用它,您的代码将编译:

public delegate bool ShouldRetry(int currentRetryCount, Exception lastException, out TimeSpan retryInterval);

public delegate ShouldRetry RetryPolicy();

现在,我说代码会编译,但我没有说它会起作用。我找不到关于这个RetryPolicy委托类型的任何官方文档,而且文章还很旧。我找到的是the Microsoft.WindowsAzure.Storage.RetryPolicies namespace中的一堆类型,包括IRetryPolicy,这可能就是您实际需要的内容。