public new static InterruptedErr make(string msg, Err cause) { InterruptedErr err = new InterruptedErr(); make_(err, msg, cause); return(err); }
public object get(Duration timeout) { object r = null; try { lock (this) { // wait until we enter a done state, the only notifies // on this object should be from cancel, set, or err if (timeout == null) { // wait forever until done while ((m_state & DONE) == 0) { Monitor.Wait(this); } } else { // if not done, then wait with timeout and then // if still not done throw a timeout exception if ((m_state & DONE) == 0) { Monitor.Wait(this, (int)timeout.millis()); if ((m_state & DONE) == 0) { throw TimeoutErr.make("Future.get timed out").val; } } } // if canceled throw CancelErr if (m_state == DONE_CANCEL) { throw CancelledErr.make("message canceled").val; } // if error was raised, raise it to caller if (m_state == DONE_ERR) { throw ((Err)m_result).rebase(); } // assign result to local variable for return r = m_result; } } catch (ThreadInterruptedException e) { throw InterruptedErr.make(e).val; } // ensure immutable or safe copy return(Sys.safe(r)); }
////////////////////////////////////////////////////////////////////////// // Utils ////////////////////////////////////////////////////////////////////////// public static void sleep(Duration duration) { try { long ticks = duration.m_ticks; System.Threading.Thread.Sleep(new System.TimeSpan(ticks / 100)); } catch (ThreadInterruptedException e) { throw InterruptedErr.make(e).val; } }
public ActorPool join(Duration timeout) { if (!isStopped()) { throw Err.make("ActorPool is not stopped").val; } long ms = timeout == null ? System.Int32.MaxValue : timeout.millis(); try { if (m_threadPool.join(ms)) { return(this); } } catch (System.Threading.ThreadInterruptedException e) { throw InterruptedErr.make(e).val; } throw TimeoutErr.make("ActorPool.join timed out").val; }
public static void make_(InterruptedErr self, string msg, Err cause) { Err.make_(self, msg, cause); }
public static void make_(InterruptedErr self, string msg) { make_(self, msg, null); }
public static void make_(InterruptedErr self) { make_(self, null); }
public static new InterruptedErr make(string msg, Err cause) { InterruptedErr err = new InterruptedErr(); make_(err, msg, cause); return err; }