public void cancel()
{
ArrayList wd;
lock (this)
{
if ((m_state & DONE) == 0) m_state = DONE_CANCEL;
m_msg = m_result = null; // allow gc
Monitor.PulseAll(this);
wd = whenDone; whenDone = null;
}
sendWhenDone(wd);
}
public void _kill() { // get/reset the pending queue Queue queue = null; lock (m_lock) { queue = this.m_queue; this.m_queue = new Queue(); } // cancel all pending messages while (true) { Future future = queue.get(); if (future == null) { break; } future.cancel(); } }