示例#1
0
 public OtherThreadExecutor(string name, long timeout, TimeUnit unit, T initialState)
 {
     if (!InstanceFieldsInitialized)
     {
         InitializeInstanceFields();
         InstanceFieldsInitialized = true;
     }
     this._name         = name;
     this.StateConflict = initialState;
     this._timeout      = MILLISECONDS.convert(timeout, unit);
 }
示例#2
0
        public static string NanosToString(long nanos)
        {
            Debug.Assert(nanos >= 0);
            long          nanoSeconds = nanos;
            StringBuilder timeString  = new StringBuilder();

            long days = DAYS.convert(nanoSeconds, NANOSECONDS);

            if (days > 0)
            {
                nanoSeconds -= DAYS.toNanos(days);
                timeString.Append(days).Append('d');
            }
            long hours = HOURS.convert(nanoSeconds, NANOSECONDS);

            if (hours > 0)
            {
                nanoSeconds -= HOURS.toNanos(hours);
                timeString.Append(hours).Append('h');
            }
            long minutes = MINUTES.convert(nanoSeconds, NANOSECONDS);

            if (minutes > 0)
            {
                nanoSeconds -= MINUTES.toNanos(minutes);
                timeString.Append(minutes).Append('m');
            }
            long seconds = SECONDS.convert(nanoSeconds, NANOSECONDS);

            if (seconds > 0)
            {
                nanoSeconds -= SECONDS.toNanos(seconds);
                timeString.Append(seconds).Append('s');
            }
            long milliseconds = MILLISECONDS.convert(nanoSeconds, NANOSECONDS);

            if (milliseconds > 0)
            {
                nanoSeconds -= MILLISECONDS.toNanos(milliseconds);
                timeString.Append(milliseconds).Append("ms");
            }
            long microseconds = MICROSECONDS.convert(nanoSeconds, NANOSECONDS);

            if (microseconds > 0)
            {
                nanoSeconds -= MICROSECONDS.toNanos(microseconds);
                timeString.Append(microseconds).Append("μs");
            }
            if (nanoSeconds > 0 || timeString.Length == 0)
            {
                timeString.Append(nanoSeconds).Append("ns");
            }
            return(timeString.ToString());
        }
示例#3
0
        /// <summary>
        /// Starts the race and waits {@code maxWaitTime} for all contestants to either fail or succeed.
        /// </summary>
        /// <param name="maxWaitTime"> max time to wait for all contestants, 0 means indefinite wait. </param>
        /// <param name="unit"> <seealso cref="TimeUnit"/> that {£{@code maxWaitTime} is given in. </param>
        /// <exception cref="TimeoutException"> if all contestants haven't either succeeded or failed within the given time. </exception>
        /// <exception cref="Throwable"> on any exception thrown from any contestant. </exception>
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
//ORIGINAL LINE: public void go(long maxWaitTime, java.util.concurrent.TimeUnit unit) throws Throwable
        public virtual void Go(long maxWaitTime, TimeUnit unit)
        {
            if (_endCondition == null)
            {
                _endCondition = () => true;
            }

            _readySet = new System.Threading.CountdownEvent(_contestants.Count);
            foreach (Contestant contestant in _contestants)
            {
                contestant.Start();
            }
            _readySet.await();
            _go.Signal();

            if (_asyncExecution)
            {
                return;
            }

            int  errorCount        = 0;
            long maxWaitTimeMillis = MILLISECONDS.convert(maxWaitTime, unit);
            long waitedSoFar       = 0;

            foreach (Contestant contestant in _contestants)
            {
                if (maxWaitTime == 0)
                {
                    contestant.Join();
                }
                else
                {
                    long time = currentTimeMillis();
                    contestant.Join(maxWaitTimeMillis - waitedSoFar);
                    waitedSoFar += currentTimeMillis() - time;
                    if (waitedSoFar >= maxWaitTimeMillis)
                    {
                        throw new TimeoutException("Didn't complete after " + maxWaitTime + " " + unit);
                    }
                }
                if (contestant.Error != null)
                {
                    errorCount++;
                }
            }

            if (errorCount > 1)
            {
                Exception errors = new Exception("Multiple errors found");
                foreach (Contestant contestant in _contestants)
                {
                    if (contestant.Error != null)
                    {
                        errors.addSuppressed(contestant.Error);
                    }
                }
                throw errors;
            }
            if (errorCount == 1)
            {
                foreach (Contestant contestant in _contestants)
                {
                    if (contestant.Error != null)
                    {
                        throw contestant.Error;
                    }
                }
            }
        }