[英]Polly Timeout optimistic using HttpClientFactory. How can I use cancellation token?
我想了解如何使用HttpClientFactory
與 Polly 實現樂觀超時策略。
在網上的示例中,在調用異步方法時使用了超時策略,以便能夠傳遞取消令牌。 但是,如果我從配置服務中設置超時策略,如指南中所示),我該如何管理取消令牌?
在示例代碼中,來自鏈接的指南,我看到了:
var timeoutPolicy = Policy.TimeoutAsync<HttpResponseMessage>(10); // Timeout for an individual try
serviceCollection.AddHttpClient("GitHub", client =>
{
client.BaseAddress = new Uri("https://api.github.com/");
client.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json");
client.Timeout = TimeSpan.FromSeconds(60); // Overall timeout across all tries
})
.AddPolicyHandler(retryPolicy)
.AddPolicyHandler(timeoutPolicy);
您應該將重試和超時策略鏈接到一個組合策略中。
你有兩個選擇:
Wrap
方法.AddPolicyHandler(retryPolicy.Wrap(timeoutPolicy))
timeoutPolicy
是內部策略,因此它分別應用於每次嘗試retryPolicy
是外部策略,因此它覆蓋了超時策略PolicyWrap
class.AddPolicyHandler(Policy.Wrap(retryPolicy,timeoutPolicy))
您應該知道,以下兩種組合策略非常不同:
Policy.Wrap(retryPolicy,timeoutPolicy)
Policy.Wrap(timeoutPolicy, retryPolicy)
推進這個想法,您可以通過定義全局超時來避免設置 HttpClient 的Timeout
屬性:
var localTimeoutPolicy = Policy.TimeoutAsync<HttpResponseMessage>(10);
var globalTimeoutPolicy = Policy.TimeoutAsync<HttpResponseMessage>(60);
var resilientStrategy = Policy.Wrap(globalTimeoutPolicy, retryPolicy, localTimeoutPolicy);
serviceCollection.AddHttpClient("GitHub", client =>
{
client.BaseAddress = new Uri("https://api.github.com/");
client.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json");
})
.AddPolicyHandler(resilientStrategy);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.