public void timed_wait(long id, int ms, mutex_base mutex, functional.func <chan_async_state> ntf) { _strand.distribute(delegate() { if (ms > 0) { async_timer timer = new async_timer(_strand); LinkedListNode <functional.func> node = _waitQueue.AddLast(delegate() { timer.cancel(); mutex.Lock(id, delegate() { ntf(chan_async_state.async_ok); }); }); timer.timeout(ms, delegate() { _waitQueue.Remove(node); ntf(chan_async_state.async_overtime); }); } else { ntf(chan_async_state.async_overtime); } }); }
public void wait(long id, mutex_base mutex, functional.func ntf) { _strand.distribute(delegate() { _waitQueue.AddLast(delegate() { mutex.Lock(id, ntf); }); }); }