我正在学习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();
}
}
1条答案
按热度按时间nbysray51#
下面是写出重试的一个基本示例:
这将输出:
你重试的可观察对象应该被 Package 在
Observable.Defer
中,以防止重复值的可能性,而且,每当我在可观察对象中使用"外部"状态时,我也会将其 Package 在Observable.Defer
中。