【发布时间】:2023-01-23 07:22:38
【问题描述】:
我正在学习 Rx,我想知道如何将重试打印到控制台,例如“重试 #1”、“重试 #2”等。我看到有人使用我找不到的 .Dump 扩展方法。
using System.Reactive.Concurrency;
using System.Reactive.Linq;
using System.Reactive.Threading.Tasks;
var test = new Test(new HttpClient());
var result = await test.GetAsync();
Console.WriteLine($"Result: {result}");
public sealed class Test
{
private readonly HttpClient _httpClient;
public Test(HttpClient httpClient)
{
_httpClient = httpClient;
}
public Task<string> GetAsync()
{
return Observable
.FromAsync(() => _httpClient.GetAsync("http://www.mocky.io/v2/5e307edf3200005d00858b49"))
.SubscribeOn(TaskPoolScheduler.Default)
.Retry(5)
.Timeout(TimeSpan.FromSeconds(5))
.Do(x => Console.WriteLine($"Is message successful? {x.IsSuccessStatusCode}"))
.SelectMany(async x =>
{
var response = await x.Content.ReadAsStringAsync();
return response;
})
.Catch<string, TimeoutException>(_ => Observable.Return("Timeout"))
.Catch<string, Exception>(ex => Observable.Return(ex.Message))
.ToTask();
}
}
【问题讨论】:
-
我知道目标是学习 Rx 但是只是为了记录: 我更喜欢 Polly。
-
.Dump()来自LINQPad。我现在在 LP 中完成大部分编码。
标签: c# .net system.reactive