/// <summary> /// Requests that the following action be completed as soon as reasonably possible. /// This will either be done immediately, or be queued for the next approriate time. /// </summary> /// <param name="callback">action to perform</param> /// <returns> /// A cancelation object. Use in a using block. /// </returns> public CallbackRequest RequestCallback(Action callback) { CallbackRequest request = new CallbackRequest(callback); lock (m_syncRoot) { m_isRequestCallbackMethodProcessing = true; Thread.MemoryBarrier(); //------------------------------------------ if (m_isSafeToCallback) { request.Run(); } else { m_isCallbackWaiting = true; m_pendingCallbacks.Add(request); } //----------------------------------------- Thread.MemoryBarrier(); m_isRequestCallbackMethodProcessing = false; } return(request); }
/// <summary> /// Requests that the following action be completed as soon as reasonably possible. /// This will either be done immediately, or be queued for the next approriate time. /// </summary> /// <param name="callback">action to perform</param> /// <returns> /// A cancelation object. Use in a using block. /// </returns> public CallbackRequest RequestCallback(Action callback) { CallbackRequest request = new CallbackRequest(callback); lock (m_syncRoot) { m_isRequestCallbackMethodProcessing = true; Thread.MemoryBarrier(); //------------------------------------------ if (m_isSafeToCallback) { request.Run(); } else { m_isCallbackWaiting = true; m_pendingCallbacks.Add(request); } //----------------------------------------- Thread.MemoryBarrier(); m_isRequestCallbackMethodProcessing = false; } return request; }