private static void TrySend( int numThreads, int numEvents, bool isPreserveOrder, Locking locking, Configuration configuration) { configuration.Runtime.Threading.IsListenerDispatchPreserveOrder = isPreserveOrder; configuration.Runtime.Threading.ListenerDispatchLocking = locking; configuration.Common.AddEventType(typeof(SupportBean)); var runtime = EPRuntimeProvider.GetRuntime(typeof(MultithreadDeterminismListener).Name, configuration); runtime.Initialize(); // setup statements var deployed = SupportCompileDeployUtil.CompileDeploy( "@Name('s0') select count(*) as cnt from SupportBean", runtime, configuration); var listener = new SupportMTUpdateListener(); deployed.Statements[0].AddListener(listener); // execute var threadPool = Executors.NewFixedThreadPool( numThreads, new SupportThreadFactory(typeof(MultithreadDeterminismListener)).ThreadFactory); var future = new IFuture<bool>[numThreads]; for (var i = 0; i < numThreads; i++) { future[i] = threadPool.Submit(new SendEventCallable(i, runtime, new GeneratorEnumerator(numEvents))); } threadPool.Shutdown(); SupportCompileDeployUtil.ExecutorAwait(threadPool, 10, TimeUnit.SECONDS); SupportCompileDeployUtil.AssertFutures(future); var events = listener.GetNewDataListFlattened(); var result = new long[events.Length]; for (var i = 0; i < events.Length; i++) { result[i] = events[i].Get("cnt").AsInt64(); } //log.info(".trySend result=" + Arrays.toString(result)); // assert result Assert.AreEqual(numEvents * numThreads, events.Length); for (var i = 0; i < numEvents * numThreads; i++) { Assert.AreEqual(result[i], (long) i + 1); } runtime.Destroy(); }