diff --git a/Polly8Study.Test/Polly8RetryStrategyTest.cs b/Polly8Study.Test/Polly8RetryStrategyTest.cs
index bfeb32a..33fa7d8 100644
--- a/Polly8Study.Test/Polly8RetryStrategyTest.cs
+++ b/Polly8Study.Test/Polly8RetryStrategyTest.cs
@@ -1,10 +1,10 @@
-namespace Polly8Study.Test
+锘縩amespace Polly8Study.Test
{
///
- /// Polly8超时策略 测试
- /// 关键:
- /// CancellationToken,没有这个是不起使用的
- /// 就是之前版本中的乐观超时,悲观超时貌似取消了
+ /// Polly8瓒呮椂绛栫暐 娴嬭瘯
+ /// 鍏抽敭锛
+ /// CancellationToken锛屾病鏈夎繖涓槸涓嶈捣浣跨敤鐨
+ /// 灏辨槸涔嬪墠鐗堟湰涓殑涔愯瓒呮椂锛屾偛瑙傝秴鏃惰矊浼煎彇娑堜簡
///
public class Polly8RetryStrategyTest
{
@@ -16,7 +16,7 @@ namespace Polly8Study.Test
}
///
- /// 重试策略
+ /// 閲嶈瘯绛栫暐
///
[Fact]
public void Test()
diff --git a/Polly8Study.Test/Polly8TimeoutStrategyTest.cs b/Polly8Study.Test/Polly8TimeoutStrategyTest.cs
index acdb517..670f29a 100644
--- a/Polly8Study.Test/Polly8TimeoutStrategyTest.cs
+++ b/Polly8Study.Test/Polly8TimeoutStrategyTest.cs
@@ -1,10 +1,10 @@
-namespace Polly8Study.Test
+锘縩amespace Polly8Study.Test
{
///
- /// Polly8超时策略 测试
- /// 关键:
- /// V8不支持悲观超时
- /// 只支持乐观超时:使用内部和外部CancellationToken
+ /// Polly8瓒呮椂绛栫暐 娴嬭瘯
+ /// 鍏抽敭锛
+ /// V8涓嶆敮鎸佹偛瑙傝秴鏃
+ /// 鍙敮鎸佷箰瑙傝秴鏃讹細浣跨敤鍐呴儴鍜屽閮–ancellationToken
///
public class Polly8TimeoutStrategyTest
{
@@ -16,29 +16,29 @@ namespace Polly8Study.Test
}
///
- /// 超时策略选项
+ /// 瓒呮椂绛栫暐閫夐」
///
[Fact]
public void TimeoutStrategyOptions_Test()
{
- //直接设置
+ //鐩存帴璁剧疆
new ResiliencePipelineBuilder()
.AddTimeout(TimeSpan.FromMilliseconds(100))
.Build();
- //默认值
+ //榛樿鍊
var defaultOption = new TimeoutStrategyOptions();
- //全功能
+ //鍏ㄥ姛鑳
TimeoutStrategyOptions timeoutOption = new TimeoutStrategyOptions
{
- //名称唯一标识了特定策略的特定实例,也包含在由各个弹性策略生成的遥测数据中
+ //鍚嶇О鍞竴鏍囪瘑浜嗙壒瀹氱瓥鐣ョ殑鐗瑰畾瀹炰緥锛屼篃鍖呭惈鍦ㄧ敱鍚勪釜寮规х瓥鐣ョ敓鎴愮殑閬ユ祴鏁版嵁涓
Name = "timeout",
- //固定超时时间(启用了TimeoutGenerator,则无效)
+ //鍥哄畾瓒呮椂鏃堕棿(鍚敤浜員imeoutGenerator锛屽垯鏃犳晥)
Timeout = TimeSpan.FromSeconds(2),
- //动态超时时间设置
+ //鍔ㄦ佽秴鏃舵椂闂磋缃
//TimeoutGenerator = arg =>
//{
// var ts = TimeSpan.FromSeconds(Math.Pow(2, 1));
@@ -46,7 +46,7 @@ namespace Polly8Study.Test
// return ValueTask.FromResult(ts);
//},
- //发生超时时引发的超时委托
+ //鍙戠敓瓒呮椂鏃跺紩鍙戠殑瓒呮椂濮旀墭
OnTimeout = (args) =>
{
var key = args.Context.OperationKey;
@@ -55,15 +55,17 @@ namespace Polly8Study.Test
},
};
- //使用
+ //浣跨敤
ResiliencePipeline pipeline = new ResiliencePipelineBuilder()
.AddTimeout(timeoutOption)
.Build();
+
+ Assert.NotEmpty(pipeline.AsSyncPolicy().PolicyKey);
}
///
- /// 非可取消任务:忽略超时
- /// 同步执行
+ /// 闈炲彲鍙栨秷浠诲姟锛氬拷鐣ヨ秴鏃
+ /// 鍚屾鎵ц
///
[Fact]
public void No_CancellationToken_Test()
@@ -72,24 +74,24 @@ namespace Polly8Study.Test
.AddTimeout(TimeSpan.FromSeconds(1))
.Build();
- //外部tcs可省略
+ //澶栭儴tcs鍙渷鐣
var tcs = new CancellationTokenSource();
try
{
pipeline.Execute
(
- //此处必须是可取消的任务,否则超时不作为(一直等待)
+ //姝ゅ蹇呴』鏄彲鍙栨秷鐨勪换鍔★紝鍚﹀垯瓒呮椂涓嶄綔涓(涓鐩寸瓑寰)
callback: (CancellationToken innerToken) =>
{
- //虽然接口耗时大,因为没有使用‘可取消的’ Send请求,超时设置被忽略,会等待接口正确返回
+ //铏界劧鎺ュ彛鑰楁椂澶э紝鍥犱负娌℃湁浣跨敤鈥樺彲鍙栨秷鐨勨 Send璇锋眰锛岃秴鏃惰缃蹇界暐锛屼細绛夊緟鎺ュ彛姝g‘杩斿洖
HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Get, "http://localhost:44344/api/Timeout/Slow");
- //关键:Send方法 没有传入参数 cancellationToken
- //其它同步方法,只要是可取消方法均可
+ //鍏抽敭锛歋end鏂规硶 娌℃湁浼犲叆鍙傛暟 cancellationToken
+ //鍏跺畠鍚屾鏂规硶锛屽彧瑕佹槸鍙彇娑堟柟娉曞潎鍙
HttpResponseMessage response = new HttpClient().Send(requestMessage);
if (response.IsSuccessStatusCode == false)
{
- _output.WriteLine($"非正常响应,响应码:{response.StatusCode}");
+ _output.WriteLine($"闈炴甯稿搷搴,鍝嶅簲鐮侊細{response.StatusCode}");
return;
}
var stream = response.Content.ReadAsStream();
@@ -98,24 +100,24 @@ namespace Polly8Study.Test
var text = System.Text.UTF8Encoding.UTF8.GetString(bs);
- _output.WriteLine($"响应内容:{text}");
+ _output.WriteLine($"鍝嶅簲鍐呭:{text}");
- _output.WriteLine("任务执行完成");
+ _output.WriteLine("浠诲姟鎵ц瀹屾垚");
},
cancellationToken: tcs.Token
);
}
catch (OperationCanceledException ex)
{
- _output.WriteLine($"任务取消,引发异常:{ex.Message}");
+ _output.WriteLine($"浠诲姟鍙栨秷锛屽紩鍙戝紓甯:{ex.Message}");
}
catch (TimeoutRejectedException ex)
{
- _output.WriteLine($"超时,引发异常:{ex.Message}");
+ _output.WriteLine($"瓒呮椂锛屽紩鍙戝紓甯:{ex.Message}");
}
catch (Exception ex)
{
- _output.WriteLine($"API服务异常:{ex.Message}");
+ _output.WriteLine($"API鏈嶅姟寮傚父锛歿ex.Message}");
}
finally
{
@@ -124,21 +126,21 @@ namespace Polly8Study.Test
}
///
- /// 可取消任务:超时
- /// 同步执行
+ /// 鍙彇娑堜换鍔:瓒呮椂
+ /// 鍚屾鎵ц
///
[Fact]
public void Has_CancellationToken_Timeout_Test()
{
TimeoutStrategyOptions timeoutOption = new TimeoutStrategyOptions
{
- //名称唯一标识了特定策略的特定实例,也包含在由各个弹性策略生成的遥测数据中
+ //鍚嶇О鍞竴鏍囪瘑浜嗙壒瀹氱瓥鐣ョ殑鐗瑰畾瀹炰緥锛屼篃鍖呭惈鍦ㄧ敱鍚勪釜寮规х瓥鐣ョ敓鎴愮殑閬ユ祴鏁版嵁涓
Name = "timeout",
- //固定超时时间(启用了TimeoutGenerator,则无效)
+ //鍥哄畾瓒呮椂鏃堕棿(鍚敤浜員imeoutGenerator锛屽垯鏃犳晥)
Timeout = TimeSpan.FromSeconds(1),
- //动态超时时间设置
+ //鍔ㄦ佽秴鏃舵椂闂磋缃
//TimeoutGenerator = arg =>
//{
// var ts = TimeSpan.FromSeconds(Math.Pow(2, 1));
@@ -146,10 +148,10 @@ namespace Polly8Study.Test
// return ValueTask.FromResult(ts);
//},
- //发生超时时引发的超时委托
+ //鍙戠敓瓒呮椂鏃跺紩鍙戠殑瓒呮椂濮旀墭
OnTimeout = (args) =>
{
- _output.WriteLine("OnTimeout 超时委托执行");
+ _output.WriteLine("OnTimeout 瓒呮椂濮旀墭鎵ц");
return ValueTask.CompletedTask;
},
};
@@ -163,14 +165,14 @@ namespace Polly8Study.Test
{
pipeline.Execute
(
- //此处必须是可取消的任务,否则超时不作为(一直等待)
+ //姝ゅ蹇呴』鏄彲鍙栨秷鐨勪换鍔★紝鍚﹀垯瓒呮椂涓嶄綔涓(涓鐩寸瓑寰)
callback: (innerToken) =>
{
HttpRequestMessage r = new HttpRequestMessage(HttpMethod.Get, "http://localhost:44344/api/Timeout/Slow");
var response = new HttpClient().Send(r, innerToken);
if (response.IsSuccessStatusCode == false)
{
- Console.WriteLine("非正常响应");
+ Console.WriteLine("闈炴甯稿搷搴");
return;
}
var stream = response.Content.ReadAsStream();
@@ -179,23 +181,23 @@ namespace Polly8Study.Test
var text = System.Text.UTF8Encoding.UTF8.GetString(bs);
- _output.WriteLine($"响应内容:{text}");
- _output.WriteLine("任务执行完成");
+ _output.WriteLine($"鍝嶅簲鍐呭:{text}");
+ _output.WriteLine("浠诲姟鎵ц瀹屾垚");
},
cancellationToken: tcs.Token
);
}
catch (OperationCanceledException ex)
{
- _output.WriteLine($"任务取消,引发异常:{ex.Message}");
+ _output.WriteLine($"浠诲姟鍙栨秷锛屽紩鍙戝紓甯:{ex.Message}");
}
catch (TimeoutRejectedException ex)
{
- _output.WriteLine($"超时,引发异常:{ex.Message}");
+ _output.WriteLine($"瓒呮椂锛屽紩鍙戝紓甯:{ex.Message}");
}
catch (Exception ex)
{
- _output.WriteLine($"API服务异常:{ex.Message}");
+ _output.WriteLine($"API鏈嶅姟寮傚父锛歿ex.Message}");
}
finally
{
@@ -204,21 +206,21 @@ namespace Polly8Study.Test
}
///
- /// 可取消任务:不超时
- /// 同步执行
+ /// 鍙彇娑堜换鍔:涓嶈秴鏃
+ /// 鍚屾鎵ц
///
[Fact]
public void Has_CancellationToken_NotTimeout_Test()
{
TimeoutStrategyOptions timeoutOption = new TimeoutStrategyOptions
{
- //名称唯一标识了特定策略的特定实例,也包含在由各个弹性策略生成的遥测数据中
+ //鍚嶇О鍞竴鏍囪瘑浜嗙壒瀹氱瓥鐣ョ殑鐗瑰畾瀹炰緥锛屼篃鍖呭惈鍦ㄧ敱鍚勪釜寮规х瓥鐣ョ敓鎴愮殑閬ユ祴鏁版嵁涓
Name = "timeout",
- //固定超时时间(启用了TimeoutGenerator,则无效)
+ //鍥哄畾瓒呮椂鏃堕棿(鍚敤浜員imeoutGenerator锛屽垯鏃犳晥)
Timeout = TimeSpan.FromSeconds(5),
- //动态超时时间设置
+ //鍔ㄦ佽秴鏃舵椂闂磋缃
//TimeoutGenerator = arg =>
//{
// var ts = TimeSpan.FromSeconds(Math.Pow(2, 1));
@@ -226,10 +228,10 @@ namespace Polly8Study.Test
// return ValueTask.FromResult(ts);
//},
- //发生超时时引发的超时委托
+ //鍙戠敓瓒呮椂鏃跺紩鍙戠殑瓒呮椂濮旀墭
OnTimeout = (args) =>
{
- Console.WriteLine("OnTimeout 超时委托执行");
+ Console.WriteLine("OnTimeout 瓒呮椂濮旀墭鎵ц");
return ValueTask.CompletedTask;
},
};
@@ -243,14 +245,14 @@ namespace Polly8Study.Test
{
pipeline.Execute
(
- //此处必须是可取消的任务,否则超时不作为(一直等待)
+ //姝ゅ蹇呴』鏄彲鍙栨秷鐨勪换鍔★紝鍚﹀垯瓒呮椂涓嶄綔涓(涓鐩寸瓑寰)
callback: (innerToken) =>
{
HttpRequestMessage r = new HttpRequestMessage(HttpMethod.Get, "http://localhost:44344/api/Timeout/Slow");
var response = new HttpClient().Send(r, innerToken);
if (response.IsSuccessStatusCode == false)
{
- Console.WriteLine("非正常响应");
+ Console.WriteLine("闈炴甯稿搷搴");
return;
}
var stream = response.Content.ReadAsStream();
@@ -259,23 +261,23 @@ namespace Polly8Study.Test
var text = System.Text.UTF8Encoding.UTF8.GetString(bs);
- _output.WriteLine($"响应内容:{text}");
- _output.WriteLine("任务执行完成");
+ _output.WriteLine($"鍝嶅簲鍐呭:{text}");
+ _output.WriteLine("浠诲姟鎵ц瀹屾垚");
},
cancellationToken: tcs.Token
);
}
catch (OperationCanceledException ex)
{
- _output.WriteLine($"任务取消,引发异常:{ex.Message}");
+ _output.WriteLine($"浠诲姟鍙栨秷锛屽紩鍙戝紓甯:{ex.Message}");
}
catch (TimeoutRejectedException ex)
{
- _output.WriteLine($"超时,引发异常:{ex.Message}");
+ _output.WriteLine($"瓒呮椂锛屽紩鍙戝紓甯:{ex.Message}");
}
catch (Exception ex)
{
- _output.WriteLine($"API服务异常:{ex.Message}");
+ _output.WriteLine($"API鏈嶅姟寮傚父锛歿ex.Message}");
}
finally
{
@@ -285,25 +287,25 @@ namespace Polly8Study.Test
}
///
- /// 不可取消任务:忽略超时
- /// 异步执行
+ /// 涓嶅彲鍙栨秷浠诲姟:蹇界暐瓒呮椂
+ /// 寮傛鎵ц
///
[Fact]
public async void No_CancellationToken_ExecuteAsync_Test()
{
TimeoutStrategyOptions timeoutOption = new TimeoutStrategyOptions
{
- //名称唯一标识了特定策略的特定实例,也包含在由各个弹性策略生成的遥测数据中
+ //鍚嶇О鍞竴鏍囪瘑浜嗙壒瀹氱瓥鐣ョ殑鐗瑰畾瀹炰緥锛屼篃鍖呭惈鍦ㄧ敱鍚勪釜寮规х瓥鐣ョ敓鎴愮殑閬ユ祴鏁版嵁涓
Name = "timeout",
- //固定超时时间(启用了TimeoutGenerator,则无效)
+ //鍥哄畾瓒呮椂鏃堕棿(鍚敤浜員imeoutGenerator锛屽垯鏃犳晥)
Timeout = TimeSpan.FromSeconds(1),
- //发生超时时引发的超时委托
+ //鍙戠敓瓒呮椂鏃跺紩鍙戠殑瓒呮椂濮旀墭
OnTimeout = (args) =>
{
- _output.WriteLine("OnTimeout 超时委托执行");
+ _output.WriteLine("OnTimeout 瓒呮椂濮旀墭鎵ц");
return ValueTask.CompletedTask;
},
};
@@ -317,27 +319,27 @@ namespace Polly8Study.Test
{
await pipeline.ExecuteAsync
(
- //此处为不可取消的任务,忽略超时(会一直等待)
+ //姝ゅ涓轰笉鍙彇娑堢殑浠诲姟锛屽拷鐣ヨ秴鏃(浼氫竴鐩寸瓑寰)
callback: async (innerToken) =>
{
- //完成大约是2秒多,而不是超时的1秒多
+ //瀹屾垚澶х害鏄2绉掑锛岃屼笉鏄秴鏃剁殑1绉掑
await Task.Delay (1000*3);
- _output.WriteLine("任务执行完成");
+ _output.WriteLine("浠诲姟鎵ц瀹屾垚");
},
cancellationToken: tcs.Token
);
}
catch (OperationCanceledException ex)
{
- _output.WriteLine($"任务取消,引发异常:{ex.Message}");
+ _output.WriteLine($"浠诲姟鍙栨秷锛屽紩鍙戝紓甯:{ex.Message}");
}
catch (TimeoutRejectedException ex)
{
- _output.WriteLine($"超时,引发异常:{ex.Message}");
+ _output.WriteLine($"瓒呮椂锛屽紩鍙戝紓甯:{ex.Message}");
}
catch (Exception ex)
{
- _output.WriteLine($"API服务异常:{ex.Message}");
+ _output.WriteLine($"API鏈嶅姟寮傚父锛歿ex.Message}");
}
finally
{
@@ -346,8 +348,8 @@ namespace Polly8Study.Test
}
///
- /// 可取消任务:超时
- /// 异步执行
+ /// 鍙彇娑堜换鍔:瓒呮椂
+ /// 寮傛鎵ц
///
///
[Fact]
@@ -364,9 +366,9 @@ namespace Polly8Study.Test
(
callback: async (innerToken) =>
{
- //完成大约是超时的1秒多,而不是任务的3秒多
+ //瀹屾垚澶х害鏄秴鏃剁殑1绉掑锛岃屼笉鏄换鍔$殑3绉掑
await Task.Delay(1000 * 3, innerToken);
- _output.WriteLine("任务执行完成");
+ _output.WriteLine("浠诲姟鎵ц瀹屾垚");
},
cancellationToken: cts.Token
);
@@ -374,8 +376,8 @@ namespace Polly8Study.Test
}
///
- /// 可取消任务:不超时
- /// 异步执行
+ /// 鍙彇娑堜换鍔:涓嶈秴鏃
+ /// 寮傛鎵ц
///
///
[Fact]
@@ -392,9 +394,9 @@ namespace Polly8Study.Test
(
callback: async (innerToken) =>
{
- //不超时,完成大约是任务耗时的1秒
+ //涓嶈秴鏃讹紝瀹屾垚澶х害鏄换鍔¤楁椂鐨1绉
await Task.Delay(1000, innerToken);
- _output.WriteLine("任务执行完成");
+ _output.WriteLine("浠诲姟鎵ц瀹屾垚");
},
cancellationToken: cts.Token
);
@@ -406,8 +408,8 @@ namespace Polly8Study.Test
}
//
- /// 可取消任务:超时
- /// 异步执行,无外层Token
+ /// 鍙彇娑堜换鍔:瓒呮椂
+ /// 寮傛鎵ц锛屾棤澶栧眰Token
///
///
[Fact]
@@ -424,9 +426,9 @@ namespace Polly8Study.Test
(
callback: async (innerToken) =>
{
- //完成大约是超时的1秒多,而不是任务的3秒多
+ //瀹屾垚澶х害鏄秴鏃剁殑1绉掑锛岃屼笉鏄换鍔$殑3绉掑
await Task.Delay(1000 * 3, innerToken);
- _output.WriteLine("任务执行完成");
+ _output.WriteLine("浠诲姟鎵ц瀹屾垚");
}
);
});
@@ -445,22 +447,22 @@ namespace Polly8Study.Test
{
pipeline.Execute
(
- //此处必须是可取消的任务,否则超时不作为(一直等待)
+ //姝ゅ蹇呴』鏄彲鍙栨秷鐨勪换鍔★紝鍚﹀垯瓒呮椂涓嶄綔涓(涓鐩寸瓑寰)
callback: SyncWithCancellationToken,
cancellationToken: tcs.Token
);
}
catch (OperationCanceledException ex)
{
- _output.WriteLine($"任务取消,引发异常:{ex.Message}");
+ _output.WriteLine($"浠诲姟鍙栨秷锛屽紩鍙戝紓甯:{ex.Message}");
}
catch (TimeoutRejectedException ex)
{
- _output.WriteLine($"超时,引发异常:{ex.Message}");
+ _output.WriteLine($"瓒呮椂锛屽紩鍙戝紓甯:{ex.Message}");
}
catch (Exception ex)
{
- _output.WriteLine($"API服务异常:{ex.Message}");
+ _output.WriteLine($"API鏈嶅姟寮傚父锛歿ex.Message}");
}
finally
{
@@ -469,7 +471,7 @@ namespace Polly8Study.Test
}
///
- /// 使用CancellationToken的同步方法
+ /// 浣跨敤CancellationToken鐨勫悓姝ユ柟娉
///
private void SyncWithCancellationToken(CancellationToken cancellationToken)
{
diff --git a/Polly8Study.Test/UseXunit.cs b/Polly8Study.Test/UseXunit.cs
index 06b60ce..d216c2e 100644
--- a/Polly8Study.Test/UseXunit.cs
+++ b/Polly8Study.Test/UseXunit.cs
@@ -1,4 +1,4 @@
-namespace Polly8Study.Test
+锘縩amespace Polly8Study.Test
{
public class UseXunit
{
@@ -12,7 +12,7 @@ namespace Polly8Study.Test
[Fact]
public void Use_xUnit_Test()
{
- var msg = "使用 xUnit 单元测试框架!";
+ var msg = "浣跨敤 xUnit 鍗曞厓娴嬭瘯妗嗘灦锛";
Assert.True(true, msg);
_output.WriteLine(msg);
diff --git a/Polly8Study.WebApi/Program.cs b/Polly8Study.WebApi/Program.cs
index 8f38c3e..6daac28 100644
--- a/Polly8Study.WebApi/Program.cs
+++ b/Polly8Study.WebApi/Program.cs
@@ -1,4 +1,4 @@
-
+锘
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
diff --git a/Polly8Study.lutconfig b/Polly8Study.lutconfig
new file mode 100644
index 0000000..596a860
--- /dev/null
+++ b/Polly8Study.lutconfig
@@ -0,0 +1,6 @@
+
+
+ true
+ true
+ 180000
+
\ No newline at end of file