本文整理汇总了C#中TestScheduler.FromTimeSpan方法的典型用法代码示例。如果您正苦于以下问题:C# TestScheduler.FromTimeSpan方法的具体用法?C# TestScheduler.FromTimeSpan怎么用?C# TestScheduler.FromTimeSpan使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TestScheduler
的用法示例。
在下文中一共展示了TestScheduler.FromTimeSpan方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: CacheShouldEatExceptionsAndMarshalThemToObservable
public void CacheShouldEatExceptionsAndMarshalThemToObservable()
{
/* This is a bit tricky:
*
* 5,2 complete at t=1000 simultaneously
* 10,0 get queued up, 0 fails immediately (delay() doesn't delay the OnError),
* so 10 completes at t=2000
* The 7 completes at t=3000
*/
var input = new[] { 5, 2, 10, 0/*boom!*/, 7 };
var sched = new TestScheduler();
Observable.Throw<int>(new Exception("Foo")).Subscribe(x => {
Console.WriteLine(x);
}, ex => {
Console.WriteLine(ex);
}, () => {
Console.WriteLine("Completed");
});
var delay = TimeSpan.FromSeconds(1.0);
var fixture = new ObservableAsyncMRUCache<int, int>(x =>
(x == 0 ? Observable.Throw<int>(new Exception("Boom!")) : Observable.Return(10 * x)).Delay(delay, sched), 5, 2, sched);
Exception exception = null;
int completed = 0;
input.ToObservable()
.SelectMany(x => (IObservable<int>)fixture.AsyncGet(x))
.Subscribe(x => {
this.Log().InfoFormat("Result = {0}", x);
completed++;
}, ex => exception = exception ?? ex);
sched.RunTo(sched.FromTimeSpan(TimeSpan.FromMilliseconds(500)));
Assert.IsNull(exception);
Assert.AreEqual(0, completed);
sched.RunTo(sched.FromTimeSpan(TimeSpan.FromMilliseconds(1500)));
Assert.IsNotNull(exception);
Assert.AreEqual(2, completed);
sched.RunTo(sched.FromTimeSpan(TimeSpan.FromMilliseconds(7500)));
Assert.IsNotNull(exception);
Assert.AreEqual(4, completed);
this.Log().Info(exception);
}
示例2: AsyncGetTest
public void AsyncGetTest()
{
var input = new[] { 1, 1, 1, 1, 1 };
var sched = new TestScheduler();
var delay = TimeSpan.FromSeconds(1.0);
var fixture = new ObservableAsyncMRUCache<int, int>(x => Observable.Return(x*5).Delay(delay, sched), 5, 2, null, sched);
int result = 0;
input.ToObservable(sched).SelectMany<int, int>(x => (IObservable<int>)fixture.AsyncGet(x)).Subscribe(x => result += x);
sched.AdvanceTo(sched.FromTimeSpan(TimeSpan.FromMilliseconds(500)));
Assert.Equal(0, result);
sched.AdvanceTo(sched.FromTimeSpan(TimeSpan.FromMilliseconds(1200)));
Assert.Equal(25, result);
sched.Start();
Assert.Equal(25, result);
}
示例3: EnsureCacheDoesNotBlockOnRelease
public void EnsureCacheDoesNotBlockOnRelease()
{
var input = new[] { 1, 2 };
var sched = new TestScheduler();
var releaseCount = 0;
var delay = TimeSpan.FromSeconds(1.0);
//set the cache to only hold one value, which forces an eviction of an inflight request from the inner cache
var fixture = new ObservableAsyncMRUCache<int, int>(x => Observable.Return(x * 5).Delay(delay, sched), 1, 2, x=>releaseCount+=1, sched);
int result = 0;
input.ToObservable(sched).SelectMany<int, int>(x => (IObservable<int>)fixture.AsyncGet(x)).Subscribe(x => result += x);
sched.AdvanceTo(sched.FromTimeSpan(TimeSpan.FromMilliseconds(1000)));
Assert.Equal(0,releaseCount);
sched.AdvanceTo(sched.FromTimeSpan(TimeSpan.FromMilliseconds(1001)));
Assert.Equal(1, releaseCount);
}
示例4: CacheShouldQueueOnceWeHitOurConcurrentLimit
public void CacheShouldQueueOnceWeHitOurConcurrentLimit()
{
var input = new[] { 1, 2, 3, 4, 1 };
var sched = new TestScheduler();
var delay = TimeSpan.FromSeconds(1.0);
var fixture = new ObservableAsyncMRUCache<int, int>(x => Observable.Return(x*5).Delay(delay, sched), 5, 2, null, sched);
int result = 0;
input.ToObservable(sched).SelectMany<int, int>(x => (IObservable<int>)fixture.AsyncGet(x)).Subscribe(x => result += x);
sched.AdvanceTo(sched.FromTimeSpan(TimeSpan.FromMilliseconds(500)));
Assert.Equal(0, result);
sched.AdvanceTo(sched.FromTimeSpan(TimeSpan.FromMilliseconds(1500)));
Assert.Equal(1*5 + 2*5 + 1*5, result);
sched.AdvanceTo(sched.FromTimeSpan(TimeSpan.FromMilliseconds(2500)));
Assert.Equal(1*5 + 2*5 + 3*5 + 4*5 + 1*5, result);
sched.AdvanceTo(sched.FromTimeSpan(TimeSpan.FromMilliseconds(5000)));
Assert.Equal(1*5 + 2*5 + 3*5 + 4*5 + 1*5, result);
}
示例5: CachedValuesTest
public void CachedValuesTest()
{
var input = new[] { 1, 2, 1, 3, 1 };
var sched = new TestScheduler();
var delay = TimeSpan.FromSeconds(1.0);
var fixture = new ObservableAsyncMRUCache<int, int>(x => Observable.Return(x*5).Delay(delay, sched), 2, 2);
var results = input.ToObservable().SelectMany(fixture.AsyncGet).CreateCollection();
sched.AdvanceTo(sched.FromTimeSpan(TimeSpan.FromMilliseconds(500)));
Assert.Equal(0, fixture.CachedValues().Count());
sched.AdvanceTo(sched.FromTimeSpan(TimeSpan.FromMilliseconds(1500)));
var output = fixture.CachedValues().ToArray();
Assert.IsTrue(output.Length == 2);
Assert.Equal(input.Length, results.Count);
}
示例6: GetTest
public void GetTest()
{
var input = new[] {1, 1, 1, 1, 1};
var sched = new TestScheduler();
ObservableAsyncMRUCache<int, int> fixture;
var delay = TimeSpan.FromSeconds(1.0);
fixture = new ObservableAsyncMRUCache<int, int>(x => Observable.Return(x*5).Delay(delay, sched), 5, 2);
int result = 0;
var t = new Thread(() => {
foreach (int x in input.Select(x => fixture.Get(x))) {
result += x;
}
});
t.Start();
sched.RunTo(sched.FromTimeSpan(TimeSpan.FromMilliseconds(500)));
Thread.Sleep(100);
Assert.AreEqual(0, result);
sched.RunTo(sched.FromTimeSpan(TimeSpan.FromMilliseconds(1200)));
Thread.Sleep(100);
Assert.AreEqual(25, result);
this.Log().Info("Running to end");
sched.Run();
t.Join();
Assert.AreEqual(25, result);
}
示例7: GetTest
public void GetTest()
{
var input = new[] { 1, 1, 1, 1, 1 };
var sched = new TestScheduler();
QueuedAsyncMRUCache<int, int> fixture;
var delay = TimeSpan.FromSeconds(1.0);
using (TestUtils.WithTestScheduler(sched)) {
fixture = new QueuedAsyncMRUCache<int, int>(x => Observable.Return(x*5).Delay(delay, sched).First(), 5, 2);
}
int result = 0;
var t = new Task(() => {
foreach (int i in input) {
this.Log().InfoFormat("Counter is {0}", result);
result += fixture.Get(i);
}
});
t.Start();
Thread.Sleep(200);
this.Log().Info("Running to t=0");
sched.RunTo(sched.FromTimeSpan(TimeSpan.FromMilliseconds(500)));
Assert.AreEqual(0, result);
this.Log().Info("Running to t=1200");
sched.RunTo(sched.FromTimeSpan(TimeSpan.FromMilliseconds(1200)));
Thread.Sleep(200);
Assert.AreEqual(25, result);
this.Log().Info("Running to end");
sched.Run();
Assert.AreEqual(25, result);
}