private void _TryToPullServiceObject(IExecutive exec, object obj) { if (m_input.Connector == null) { return; } object serviceObject = m_input.OwnerPeek(null); if (serviceObject == null) { return; } lock (this){ if (m_pending) { return; } if (RequiresAsyncEvents) { m_pending = true; } } if (OnCanWeProcessServiceObject(this, serviceObject)) { serviceObject = m_input.OwnerTake(null); OnPreCommencementSetup(this, serviceObject); m_pending = false; Process(serviceObject); } }