Esempio n. 1
0
 public void ParallelAccess()
 {
     using (var sessionProvider = new RSessionProvider(TestCoreServices.CreateReal())) {
         var guids = new[] { new Guid(), new Guid() };
         ParallelTools.Invoke(100, i => {
             var session = sessionProvider.GetOrCreate(guids[i % 2]);
             session.Dispose();
         });
     }
 }
Esempio n. 2
0
 public void ParallelAccess()
 {
     using (var sessionProvider = new RSessionProvider(_services)) {
         var guids = new[] { nameof(ParallelAccess) + 1, nameof(ParallelAccess) + 2 };
         ParallelTools.Invoke(100, i => {
             var session = sessionProvider.GetOrCreate(guids[i % 2]);
             session.Dispose();
         });
     }
 }
Esempio n. 3
0
 public void ParallelAccess()
 {
     using (var sessionProvider = new RSessionProvider()) {
         var guids = new[] { new Guid(), new Guid() };
         ParallelTools.Invoke(100, i => {
             var session = sessionProvider.GetOrCreate(guids[i % 2], _brokerConnector);
             session.Dispose();
         });
     }
 }
Esempio n. 4
0
 public void RHostPipeFuzzTest(int iteration)
 {
     ParallelTools.Invoke(1000, i => {
         var input = GenerateInput();
         try {
             var message  = Message.Parse(input);
             var msgbytes = message.ToBytes();
         } catch (InvalidDataException) {
         } catch (TraceFailException) {
         }
     });
 }
Esempio n. 5
0
        public async Task Invoke_Concurrent_ChangeAction()
        {
            var counts = new int[4];
            var action = new DelayedAsyncAction(200);

            ParallelTools.Invoke(4, i => {
                action.Invoke(() => Task.FromResult(Interlocked.Increment(ref counts[i])));
            });
            await Task.Delay(400);

            counts.Should().ContainSingle(i => i == 1, "DelayedAction should be called only once")
            .And.OnlyContain(i => i <= 1, "DelayedAction should be called more than once");
        }
Esempio n. 6
0
        public async Task InvokeTwice_DuringTimeout_Concurrent()
        {
            var count  = 0;
            var action = new DelayedAsyncAction(200, () => Task.FromResult(Interlocked.Increment(ref count)));

            ParallelTools.Invoke(4, async i => {
                await Task.Delay(50 * i);
                action.Invoke();
            });
            await Task.Delay(500);

            count.Should().Be(1, "DelayedAction should be called only once");
        }
Esempio n. 7
0
        public void TrySetException()
        {
            var tcs   = new TaskCompletionSourceEx <int>();
            var count = 0;

            ParallelTools.Invoke(8, i => {
                var isSet = tcs.TrySetException(new Exception());
                if (isSet)
                {
                    Interlocked.Increment(ref count);
                }
            });

            count.Should().Be(1);
        }
Esempio n. 8
0
            public async Task ExclusiveInteraction()
            {
                var interactionTasks = ParallelTools.Invoke(4, i => _session.BeginInteractionAsync());
                IList <Task <IRSessionInteraction> > runningTasks = interactionTasks.ToList();

                while (runningTasks.Count > 0)
                {
                    await Task.WhenAny(runningTasks);

                    IList <Task <IRSessionInteraction> > completedTasks;
                    runningTasks.Split(t => t.Status == TaskStatus.RanToCompletion, out completedTasks, out runningTasks);
                    completedTasks.Should().ContainSingle();
                    completedTasks.Single().Result.Dispose();
                }
            }
Esempio n. 9
0
        public void TryMarkDisposed_Concurrent()
        {
            var results = ParallelTools.Invoke(50, i => _disposeToken.TryMarkDisposed());

            results.Should().ContainSingle(r => r);
        }