Beispiel #1
0
        public async Task ClientMultipleComputationsAndIterators()
        {
            var NUM_COMPUTATIONS = 1000;
            var grain            = GrainFactory.GetGrain <IMyOtherReactiveGrain>(random.Next());

            var Rcs = new List <IReactiveComputation <string[]> >();

            for (var i = 0; i < NUM_COMPUTATIONS; i++)
            {
                Rcs.Add(GrainFactory.StartReactiveComputation(async() =>
                {
                    var res1 = await grain.GetValue(1);
                    var res2 = await grain.GetValue(1);
                    var res3 = await grain.GetValue(2);
                    return(new[] { res1, res2, res3 });
                }));
            }

            var Its1 = Rcs.Select((rc) => rc.GetResultEnumerator()).ToList();
            var Its2 = Rcs.Select((rc) => rc.GetResultEnumerator()).ToList();


            var NextResults1 = await Task.WhenAll(Its1.Select((it) => it.NextResultAsync()).ToList());

            var NextResults2 = await Task.WhenAll(Its2.Select((it) => it.NextResultAsync()).ToList());

            foreach (var NextResult1 in NextResults1)
            {
                Assert.Equal(NextResult1, new[] { "foo", "foo", "foo" });
            }
            foreach (var NextResult2 in NextResults2)
            {
                Assert.Equal(NextResult2, new[] { "foo", "foo", "foo" });
            }

            await grain.SetValue("bar");

            // wait for all updates to propagate
            await Task.Delay(3000);

            NextResults1 = await Task.WhenAll(Its1.Select((it) => it.NextResultAsync()).ToList());

            NextResults2 = await Task.WhenAll(Its2.Select((it) => it.NextResultAsync()).ToList());

            foreach (var NextResult1 in NextResults1)
            {
                Assert.Equal(NextResult1, new string[] { "bar", "bar", "bar" });
            }
            foreach (var NextResult2 in NextResults2)
            {
                Assert.Equal(NextResult2, new[] { "bar", "bar", "bar" });
            }
            foreach (var Rc in Rcs)
            {
                Rc.Dispose();
            }
        }
Beispiel #2
0
        /// <inheritdoc cref="IDisposable.Dispose" />
        public void Dispose()
        {
            if (!_disposed)
            {
                _disposed = true;

                Vehicle.Dispose();
                Rc.Dispose();
                Map.Dispose();
                Camera.Dispose();

                _camera.Dispose();
                _rc.Dispose();
                _multirotorVehicle.Dispose();

                Proxy.Dispose();
            }
        }
Beispiel #3
0
            public async Task MultipleComputationsUsingSameMethodSameActivation(int randomoffset)
            {
                int NumComputations = 100;
                var grain           = GrainFactory.GetGrain <IMyOtherReactiveGrain>(randomoffset);

                List <IReactiveComputation <string> > ReactComps = new List <IReactiveComputation <string> >();

                for (var i = 0; i < NumComputations; i++)
                {
                    ReactComps.Add(GrainFactory.StartReactiveComputation(() =>
                                                                         grain.GetValue()
                                                                         ));
                }


                var Its = ReactComps.Select((Rc) => Rc.GetResultEnumerator()).ToList();

                // await all first results
                var Results1 = await Task.WhenAll(Its.Select(It =>
                                                             It.NextResultAsync()
                                                             ).ToList());

                foreach (var result1 in Results1)
                {
                    Assert.Equal(result1, "foo");
                }

                // update the dependency
                await grain.SetValue("bar");

                // await all second results
                var Results2 = await Task.WhenAll(Its.Select(It => It.NextResultAsync()));

                foreach (var result2 in Results2)
                {
                    Assert.Equal(result2, "bar");
                }

                foreach (var Rc in ReactComps)
                {
                    Rc.Dispose();
                }
            }
Beispiel #4
0
            public async Task MultipleComputationsUsingSameMethodDifferentActivation(int randomoffset)
            {
                int NumComputations = 1000;

                List <IReactiveComputation <string> > ReactComps = new List <IReactiveComputation <string> >();

                for (var i = 0; i < NumComputations; i++)
                {
                    var grain = GrainFactory.GetGrain <IMyOtherReactiveGrain>(randomoffset + i);
                    ReactComps.Add(GrainFactory.StartReactiveComputation(() =>
                                                                         grain.GetValue()));
                }


                var Its      = ReactComps.Select((Rc) => Rc.GetResultEnumerator()).ToList();
                var Results1 = await Task.WhenAll(Its.Select(It => It.NextResultAsync()));

                foreach (var result1 in Results1)
                {
                    Assert.Equal(result1, "foo");
                }

                for (var j = 0; j < NumComputations; j++)
                {
                    await GrainFactory.GetGrain <IMyOtherReactiveGrain>(randomoffset + j).SetValue("bar" + j);
                }

                var Results2 = await Task.WhenAll(Its.Select(It => It.NextResultAsync()));


                var k = 0;

                foreach (var result2 in Results2)
                {
                    Assert.Equal(result2, "bar" + k++);
                }

                foreach (var Rc in ReactComps)
                {
                    Rc.Dispose();
                }
            }