如何在 RetryPolicy 上使用策略包装?

2023-12-31

我有以下使用的重试策略Polly.Extensions.Http:

var retryPolicy = Policy.Handle<BrokenCircuitException>().OrTransientHttpError().WaitAndRetryAsync
                (
                    retryCount: maxRetryCount,
                    sleepDurationProvider: attempt => TimeSpan.FromSeconds(Math.Pow(2, attempt)),
                    onRetryAsync: (exception, calculatedWaitDuration, retryCount, context) =>
                    {
                      //Code
                    }
                );

我想用断路器和隔板策略来包装该策略:

var circuitBreaker = Policy.Handle<HttpRequestException>().CircuitBreakerAsync(
            exceptionsAllowedBeforeBreaking: maxExceptionsBeforeBreaking,
            durationOfBreak: TimeSpan.FromSeconds(circuitBreakDurationSeconds),
            onBreak: (exception, timespan, context) =>
            {
              //Code
            },
            onReset: (context) =>
            {
                //Code
            }
        );

var sharedBulkhead = Policy.BulkheadAsync(
            maxParallelization: maxParallelizations,
            maxQueuingActions: maxQueuingActions,
            onBulkheadRejectedAsync: (context) =>
            {
                //Code
            }
        );

我使用以下代码将策略包装在一起:

Policy.WrapAsync(retryPolicy, circuitBreaker, sharedBulkhead);

这是一个错误:

无法从“Polly.Retry.RetryPolicy”转换为“Polly.IAsyncPolicy”


当策略配置使用.HandleTransientHttpError() or .OrTransientHttpError() https://github.com/App-vNext/Polly/wiki/Polly-and-HttpClientFactory#extending-the-convenience-addtransienthttperrorpolicy-definition,策略配置为处理具体状态码结果 https://github.com/App-vNext/Polly/wiki/Polly-and-HttpClientFactory#extending-the-convenience-addtransienthttperrorpolicy-definition执行返回的HttpResponseMessage.

这使得返回的策略满足通用接口的类型IAsyncPolicy<HttpResponseMessage>而不是非通用的IAsyncPolicy.

创建一个通用的PolicyWrap<TResult>使用PolicyWrap 静态语法 https://github.com/App-vNext/Polly/wiki/PolicyWrap#static-syntax您必须显式指定泛型类型参数:

Policy.WrapAsync<HttpResponseMessage>(retryPolicy, circuitBreaker, sharedBulkhead)

如果您使用PolicyWrap 实例语法 https://github.com/App-vNext/Polly/wiki/PolicyWrap#instance-syntax,编译器通常可以推断出语法。因此,以下内容也应该足够了:

retryPolicy.WrapAsync(circuitBreaker).WrapAsync(sharedBulkhead)

Polly 文档涵盖了非通用策略和通用策略之间的差异,一般而言,自述文件 https://github.com/App-vNext/Polly#handing-return-values-and-policytresult and wiki https://github.com/App-vNext/Polly/wiki/Non-generic-and-generic-policies.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 RetryPolicy 上使用策略包装? 的相关文章

  • 如何在多线程C++ 17程序中交换两个指针?

    我有两个指针 pA 和 pB 它们指向两个大的哈希映射对象 当pB指向的哈希图完全更新后 我想交换pB和pA 在C 17中 如何快速且线程安全地交换它们 原子 我是 c 17 的新手 2个指针的原子无等待交换可以通过以下方式实现 inclu
  • 为什么pow函数比简单运算慢?

    从我的一个朋友那里 我听说 pow 函数比简单地将底数乘以它的指数的等价函数要慢 例如 据他介绍 include
  • IdentityServer 4 对它的工作原理感到困惑

    我阅读和观看了很多有关 Identity Server 4 的内容 但我仍然对它有点困惑 因为似乎有很多移动部件 我现在明白这是一个单独的项目 它处理用户身份验证 我仍然不明白的是用户如何注册它 谁存储用户名 密码 我打算进行此设置 Rea
  • 查找进程的完整路径

    我已经编写了 C 控制台应用程序 当我启动应用程序时 不使用cmd 我可以看到它列在任务管理器的进程列表中 现在我需要编写另一个应用程序 在其中我需要查找以前的应用程序是否正在运行 我知道应用程序名称和路径 所以我已将管理对象搜索器查询写入
  • 如何判断计算机是否已重新启动?

    我曾经使用过一个命令行 SMTP 邮件程序 作为试用版的限制 它允许您在每个 Windows 会话中最多接收 10 封电子邮件 如果您重新启动计算机 您可能还会收到 10 个以上 我认为这种共享软件破坏非常巧妙 我想在我的应用程序中复制它
  • 尝试使用 VS 2012 打开我的 asp.net 4.5 MVC Web 应用程序时出错。Asp.net 尚未在服务器上注册

    我有一个Windows Server 2012 R2 Visual Studio 专业版 2012 现在我用来开发 ASP NET 4 5 MVC 4 Web 应用程序 没有任何问题 但现在当我尝试打开该项目时 我会收到此错误 如果我单击
  • Visual Studio 在构建后显示假错误

    我使用的是 Visual Studio 2017 构建后 sln在调试模式下 我收到错误 但是 当我通过双击错误列表选项卡中的错误来访问错误时 错误会从页面中消失 并且错误数量也会减少 我不太确定这种行为以及为什么会发生这种情况 有超过 2
  • unordered_map 中字符串的 C++ 哈希函数

    看起来 C 标准库中没有字符串的哈希函数 这是真的 在任何 c 编译器上使用字符串作为 unordered map 中的键的工作示例是什么 C STL提供模板专业化 http en cppreference com w cpp string
  • 使用 LINQ to SQL 时避免连接超时的最佳实践

    我需要知道在 net 应用程序中使用 LINQ to SQL 时避免连接超时的最佳实践 特别是在返回时IQueryable
  • 在Linux中,找不到框架“.NETFramework,Version=v4.5”的参考程序集

    我已经设置了 Visual studio 来在我的 Ubuntu 机器上编译 C 代码 我将工作区 我的代码加载到 VS 我可以看到以下错误 The reference assemblies for framework NETFramewo
  • 为什么可以通过ref参数修改readonly字段?

    考虑 class Foo private readonly string value public Foo Bar ref value private void Bar ref string value value hello world
  • 类型约束

    我有以下类层次结构 class Header IEnumerable
  • ASP.net Gridview 分页在 UpdatePanel 中不起作用

    虽然类似的问题已经被问过很多次了 但问题仍然没有解决 这是问题 我有一个GridView它包含在选项卡容器中AJAX控件本身位于UpdatePanel Gridview工作得很好并且其相应的方法被准确地触发 但是当我启用paging 例如
  • 使用valgrind进行GDB远程调试

    如果我使用远程调试gdb我连接到gdbserver using target remote host 2345 如果我使用 valgrind 和 gdb 调试内存错误 以中断无效内存访问 我会使用 target remote vgdb 启动
  • Unity:通过拦截将两个接口注册为一个单例

    我有一个实现两个接口的类 我想对该类的方法应用拦截 我正在遵循中的建议Unity 将两个接口注册为一个单例 https stackoverflow com questions 1394650 unity register two inter
  • 实体框架中的“it”是什么

    如果以前有人问过这个问题 请原谅我 但我的任何搜索中都没有出现 它 我有两个数据库表 Person 和 Employee 对每个类型的表进行建模 例如 Employee is a Person 在我的 edmx 设计器中 我定义了一个实体
  • 可访问性不一致:参数类型的可访问性低于方法

    我试图在两个表单之间传递一个对象 基本上是对当前登录用户的引用 目前 我在登录表单中有一些类似的内容 private ACTInterface oActInterface public void button1 Click object s
  • 是否可以在不连接数据库的情况下检索 MetadataWorkspace?

    我正在编写一个需要遍历实体框架的测试库MetadataWorkspace对于给定的DbContext类型 但是 由于这是一个测试库 我宁愿不连接到数据库 它引入了测试环境中可能无法使用的依赖项 当我尝试获取参考时MetadataWorksp
  • ListItem 附加自定义值

    我在asp net中使用dropdownlist 它有代表下拉列表项目的ListItem集合 每个ListItem只有两个字段来保存数据 Value和Text字段 但这些还不够 我想保存更多数据对于每个项目 假设附加字段中有 Text1 和
  • OpenCV SIFT 描述符关键点半径

    我正在深入研究OpenCV的SIFT描述符提取的实现 https github com Itseez opencv blob master modules nonfree src sift cpp 我发现了一些令人费解的代码来获取兴趣点邻域

随机推荐

  • Perl 子例程数组和标量变量参数

    我到底如何将标量变量和数组变量传递给 Perl 中的子例程 my currVal 1 my currValTwo 1 my currArray one two three my currArrayTwo one two three mysu
  • 交换 PostgreSQL 中的列值

    In my PostgreSQL数据库 我有一个包含两个文本值的表 t1 and t2 id t1 t2 1 abcd xyz 2 aazz rst 3 fgh qwerty 我想交换列的值t1 and t2对于表中的每一行 使用上面的示例
  • Chrome远程调试显示设备但不检查链接

    我想在 Chrome 上远程调试 Android 应用程序 我的设备是 Qmobile A11 Note 配备 Android v4 0 4 Google Chrome v42 和 Cordova v3 7 我已在我的设备上启用 USB 调
  • Android:将变量传递给已运行的服务

    我在将值从活动传递到已运行的服务时遇到问题 我想知道最好的方法是什么 添加额外内容不起作用 因为我相信这必须在意图开始之前完成 如我错了请纠正我 任何帮助都会很棒 如果需要的话我可以详细说明 Dan 如果您的服务不是IntentServic
  • 如何将 NTLM 身份验证与 Active Directory 结合使用

    我正在尝试在我们的内部站点之一上实施 NTLM 身份验证 一切正常 我不知道的一个难题是如何从 NTLM 获取信息并使用 Active Directory 进行身份验证 有一个NTLM 的良好描述 http www innovation c
  • PHP 关闭:无法写入文件?

    我使用 Log 类在执行期间存储消息 然后应该在关闭时将这些消息写入文件 使用 register shutdown function 但由于某种原因 我总是收到 file put contents 无法打开流 没有这样的文件或目录 文件不存
  • 使 Visual Studio 在项目文件更改时自动重新加载解决方案

    在我正在处理的当前项目中 目前存在大量代码变动 这意味着从源代码管理进行更新有时可能意味着许多 csproj 文件更改 众所周知 VS2010没有 Reload all 按钮 但是你必须重新加载每个项目并确认每次重新加载 有没有一种方法可以
  • 我想将 sqlite3 db 从内存复制到硬盘。我能怎么做? [复制]

    这个问题在这里已经有答案了 我想将 sqlite 数据库从内存复制到硬盘 我能怎么做 我尝试这样 conn phy sqlite3 connect phy db conn sqlite3 connect memory c conn curs
  • OpenCV C/C++ 中仅过滤出一个轮廓

    我正在尝试编写一个程序 使用基于 Canny 过滤器和轮廓查找功能的摄像机 网络摄像头来检测任何形状的物体 这是我的程序 int main int argc char argv CvCapture cam CvMoments moments
  • 自定义异常过滤器在 asp.net MVC 中未被命中

    我有一个自定义异常过滤器 用于捕获我编写的自定义异常 但由于某种原因 当我抛出异常时 它永远不会到达过滤器 相反 我只是收到一个错误 表明我的异常未由用户代码处理 任何人都可以提供一些关于我应该如何设置的建议 帮助吗 相关代码如下 cont
  • 在 QT 中显示(渲染)字符串中的 HTML

    我在 QString 中有 html 我可以使用什么小部件来显示它 QWebView不是必需的 因为我不访问互联网 QWebView http doc qt io qt 4 8 qwebview htmls setHtml http doc
  • ReSharper:查找可选参数的用法

    如果我有一个带有可选参数的函数 是否有一种简单的方法可以找到我的代码中调用该函数并将值传递给该参数的所有位置 该函数有许多非默认参数 因此扫描调用该函数的位置的通常查找用法结果是有问题的 因为它会修剪行 并且我看不到是否使用了可选参数 Wi
  • 快速获得多个链表的部分排序的算法

    我有一个情况 如下 I have n双向链表 每个列表都有一个哨兵开始和结束 这些列表都有same开始和结束节点 不是必需的 但为了简单起见 这些列表是同质的并且可能共享项目 我想找到所有节点的部分排序n列表 从开始节点开始 到结束节点结束
  • JMSTemplate 中的 setSessionTransacted 到底意味着什么?

    如果我正确理解 Spring 文档 请解释一下 Spring 文档指出 https docs spring io spring docs current spring framework reference integration html
  • 具有相同名称的多个文本输入 - 添加到数据库

    我有一个包含多个字段的表单 所有字段都可以相乘
  • 大 O 表示法运行时

    我已经得到了一些代码来计算它们的大 O 运行时间 有人可以告诉我我是否走在正确的轨道上吗 program1 int i count 0 n 20000 for i 0 i lt n n i count 那是 O n 2 吗 number2
  • 在 PHP 中创建新线程(?)[重复]

    这个问题在这里已经有答案了 可能的重复 php执行后台进程 https stackoverflow com questions 45953 php execute a background process 我怎样才能实现应该在 php 线程
  • OSX:proc_pidinfo 对于其他用户的进程返回 0

    我需要获取有关在 Mac OSX 上运行进程的一些信息 PID UID GID 进程名称 我试过proc pidinfo 对于我自己的流程来说 它工作得很好 但是 对于其他用户拥有的进程 则返回 0 没有关于此功能的文档 但根据网上找到的资
  • 如何使用 sbt 构建 play 框架示例应用程序(不是 play)?

    我在示例应用程序中调用 sbt 时收到 NPE 请注意 我们无法使用 play 运行我们的整个应用程序 我们需要能够通过 sbt 运行它 C apps playframework samples scala websocket chat g
  • 如何在 RetryPolicy 上使用策略包装?

    我有以下使用的重试策略Polly Extensions Http var retryPolicy Policy Handle