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); }
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()); }
/// <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; } } } }