欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

.Net彈性和瞬態(tài)故障處理庫(kù)Polly實(shí)現(xiàn)執(zhí)行策略

 更新時(shí)間:2022年06月29日 16:16:38   作者:天方  
這篇文章介紹了.Net彈性和瞬態(tài)故障處理庫(kù)Polly實(shí)現(xiàn)執(zhí)行策略的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

執(zhí)行策略

執(zhí)行策略的常見(jiàn)方式是調(diào)用策略的Execute函數(shù)

var policy = Policy.Handle<TimeoutException>().Retry();
policy.Execute(DoSomething);

返回值:

如果有返回值,它也是可以獲取其返回值的:

var result = policy.Execute(DoSomething);

捕獲異常:

如果在策略的執(zhí)行過(guò)程中出現(xiàn)了異常,也會(huì)在該函數(shù)中同步拋出來(lái),和直接執(zhí)行該委托行為一致??梢灾苯油ㄟ^(guò)try-catch處理。

try
{
    policy.Execute(DoSomething);
}
catch (Exception e)
{
    throw;
}

也可以通過(guò)ExecuteAndCapture函數(shù)捕獲異常。

var result = policy.ExecuteAndCapture(DoSomething);
if (result.FaultType == null)
{
    Console.WriteLine(result.Result);
}

策略上下文

在策略的處理過(guò)程中,有一個(gè)上下文對(duì)象,可以在回調(diào)函數(shù)中使用:

public static RetryPolicy Retry(this PolicyBuilder policyBuilder, int retryCount, Action<Exception, int, Context> onRetry);

它是一個(gè)IDictionary<string, object>類型的對(duì)象,它在Policy的執(zhí)行過(guò)程中都可以使用,如:

Policy.Handle<TimeoutException>().Retry(3, (err, countDown, context) =>
{
    var method = context["method"];
    ConsoleLogger.WriteLine(method);
})

這個(gè)上下文對(duì)象可以在應(yīng)用策略的時(shí)候帶入:

policy.Execute(DoSomething, new Context("context")
{
    ["method"] = "PolicyTest"
});

依賴注入

Polly也自帶了一個(gè)簡(jiǎn)單的DI框架,方便復(fù)用Policy,使用方式如下:

var registry = new PolicyRegistry();
registry.Add("timeout & retry", Policy.Handle<TimeoutException>().Retry(3));

var policy = registry.Get<ISyncPolicy>("timeout & retry");
policy.Execute(DoSomething);

當(dāng)然,也可以使用Autofac等自己喜歡的方式。

線程安全

Policy本身是線程安全的,可以并發(fā)使用同一個(gè)Policy,但如果Policy中執(zhí)行的委托有多線程問(wèn)題,仍然會(huì)出現(xiàn)異常。

異步的支持

Policy對(duì)異步操作也提供了良好的支持,只需要使用相應(yīng)以Async結(jié)尾的函數(shù)即可。

var policy = Policy.Handle<TimeoutException>().RetryAsync(3);
await policy.ExecuteAsync(DoSomethingAsync);

PS:有的不需要(也沒(méi)有)以Async的函數(shù),如Handle

同步上下文

對(duì)于有的異常處理,如果需要同步上下文,則需要在ExecuteAsync函數(shù)中設(shè)置continueOnCapturedContext參數(shù)為false。

var policy = Policy.Handle<TimeoutException>().RetryAsync(3);
await policy.ExecuteAsync(DoSomethingAsync, CancellationToken.None, continueOnCapturedContext: true);

Cancellation的支持

Polly也支持系統(tǒng)的co-operative cancellation框架,在重試,超時(shí),bulkhead等策略中通知執(zhí)行的委托,從而影響其行為。要使用Cancellation,需要在Excute的時(shí)候傳入CancellationToken。

policy.Execute(ct =>
{
    ct.ThrowIfCancellationRequested();
}, cts.Token);

具體示例在介紹彈性策略的超時(shí)策略時(shí)有介紹到。

到此這篇關(guān)于Polly實(shí)現(xiàn)執(zhí)行策略的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • ASP.NET Core 使用Cookie驗(yàn)證身份的示例代碼

    ASP.NET Core 使用Cookie驗(yàn)證身份的示例代碼

    這篇文章主要介紹了ASP.NET Core 使用Cookie驗(yàn)證身份的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • ASP.NET Ajax級(jí)聯(lián)DropDownList實(shí)現(xiàn)代碼

    ASP.NET Ajax級(jí)聯(lián)DropDownList實(shí)現(xiàn)代碼

    我想大家對(duì)Ajax已耳熟能詳。自web 2.0概念出現(xiàn)以后,提供更好的用戶體驗(yàn)變得越來(lái)越重要。那么今天我來(lái)講解一下如何使用ASP.NET Ajax和web service構(gòu)建無(wú)刷新級(jí)聯(lián)DropDownList(以下簡(jiǎn)稱為級(jí)聯(lián)DDL)。完成的效果圖
    2008-12-12
  • ADO.Net 類型化DataSet的簡(jiǎn)單介紹

    ADO.Net 類型化DataSet的簡(jiǎn)單介紹

    今天學(xué)習(xí)了類型化DataSet,筆記整理如下,需要的朋友可以參考一下
    2013-04-04
  • asp.net core 騰訊驗(yàn)證碼的接入示例代碼

    asp.net core 騰訊驗(yàn)證碼的接入示例代碼

    這篇文章主要介紹了asp.net core 騰訊驗(yàn)證碼的接入示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • ASP.NET 頁(yè)面中動(dòng)態(tài)增加的控件、添加事件

    ASP.NET 頁(yè)面中動(dòng)態(tài)增加的控件、添加事件

    在ASP.NET中動(dòng)態(tài)創(chuàng)建一個(gè)控件總是不那么順利,特別是當(dāng)對(duì)頁(yè)面的Life Cycle不是那么了然的情況下!這里簡(jiǎn)單描述一下要求,然后提供一個(gè)解決方案,大家看看有沒(méi)有更好的Idea,如果有的話就是我的大幸了,呵呵!
    2009-07-07
  • 手把手教你mvc導(dǎo)入excel

    手把手教你mvc導(dǎo)入excel

    這篇文章主要為大家詳細(xì)介紹了手把手教你mvc導(dǎo)入excel的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • 使用NLog給Asp.Net Core做請(qǐng)求監(jiān)控的方法

    使用NLog給Asp.Net Core做請(qǐng)求監(jiān)控的方法

    這篇文章主要介紹了使用NLog給Asp.Net Core做請(qǐng)求監(jiān)控的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • ASP.NET性能優(yōu)化之構(gòu)建自定義文件緩存

    ASP.NET性能優(yōu)化之構(gòu)建自定義文件緩存

    ASP.NET的輸出緩存(即靜態(tài)HTML)在.NET4.0前一直是基于內(nèi)存的。這意味著如果我們的站點(diǎn)含有大量的緩存,則很容易消耗掉本機(jī)內(nèi)存。
    2011-09-09
  • MVC4 基礎(chǔ) 枚舉生成 DropDownList 實(shí)用技巧

    MVC4 基礎(chǔ) 枚舉生成 DropDownList 實(shí)用技巧

    本篇文章小編為大家介紹,MVC4 基礎(chǔ) 枚舉生成 DropDownList 實(shí)用技巧。需要的朋友參考下
    2013-04-04
  • asp.net Repeater之非常好的數(shù)據(jù)分頁(yè)

    asp.net Repeater之非常好的數(shù)據(jù)分頁(yè)

    asp.net Repeater之非常好的數(shù)據(jù)分頁(yè)實(shí)現(xiàn)代碼。
    2009-07-07

最新評(píng)論