private object[] TryMT(Func <bool>[] callables)
        {
            var threadPool = Executors.DefaultExecutor(); // NewFixedThreadPool(callables.Length);

            var futures = new IFuture <bool> [callables.Length];

            for (var i = 0; i < callables.Length; i++)
            {
                futures[i] = threadPool.Submit(callables[i]);
            }

            threadPool.Shutdown();
            threadPool.AwaitTermination(10, TimeUnit.SECONDS);

            var results = new object[futures.Length];

            for (var i = 0; i < futures.Length; i++)
            {
                results[i] = futures[i].GetValueOrDefault();
            }
            return(results);
        }