mirror of
https://github.com/Cysharp/R3.git
synced 2026-10-28 06:07:36 +08:00
32 lines
839 B
C#
32 lines
839 B
C#
using R3;
|
|
//using System.Reactive.Linq;
|
|
using System.Diagnostics;
|
|
using System.Threading.Channels;
|
|
using System.Xml.Serialization;
|
|
|
|
|
|
|
|
var doScan = Observable.FromAsync(async (token) =>
|
|
{
|
|
Console.WriteLine("scan start");
|
|
await Task.Delay(TimeSpan.FromSeconds(3));
|
|
Console.WriteLine("scan end");
|
|
return 5;
|
|
});
|
|
|
|
var doCalc = Observable.FromAsync(async (token) =>
|
|
{
|
|
Console.WriteLine("calc start");
|
|
await Task.Delay(TimeSpan.FromSeconds(3), token);
|
|
Console.WriteLine("calc end");
|
|
return 10;
|
|
});
|
|
|
|
var countDown = Observable.Interval(TimeSpan.FromMilliseconds(300)).Index().Select(v => v > 9 ? 9 : v);
|
|
|
|
var work = doScan.Select(_ => doCalc).Switch().Replay(1).RefCount();
|
|
countDown.TakeUntil(work.LastAsync()).Concat(work.TakeLast(1)).Subscribe(v => Console.WriteLine($"progress: {v}"));
|
|
|
|
|
|
Console.ReadLine();
|