//这是我宣布的
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'错误。
答案 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
,这可能就是您实际需要的内容。