/// <summary> /// Acquires a composite PooledServiceActivity that holds a reference to the underlying activity, once you are done /// working /// with the activity you must return it to the pool via PushActivity. /// </summary> /// <returns></returns> public PooledServiceActivity PopActivity() { PooledServiceActivity result; lock (_poolGuard) { if (_workflowPool.Count == 0) { if (_xamlStream == null) { result = new PooledServiceActivity(_generation, _workflowActivity); } else { Activity activity = ActivityXamlServices.Load(_xamlStream); _xamlStream.Seek(0, SeekOrigin.Begin); result = new PooledServiceActivity(_generation, activity); } } else { result = _workflowPool.Dequeue(); } } return(result); }
/// <summary> /// Pushes a previously released activity back into the activity pool. /// </summary> /// <param name="activity"></param> public void PushActivity(PooledServiceActivity activity) { if (activity != null) { lock (_poolGuard) { if (activity.Generation == _generation) { if (_workflowPool.Count < 10) { if (_xamlStream != null) { _workflowPool.Enqueue(activity); } } } } } }
/// <summary> /// Pushes a previously released activity back into the activity pool. /// </summary> /// <param name="activity"></param> public void PushActivity(PooledServiceActivity activity) { if (activity != null) { lock (_poolGuard) { if (activity.Generation == _generation) { if (_workflowPool.Count < 10) if (_xamlStream != null) _workflowPool.Enqueue(activity); } } } }
/// <summary> /// Acquires a composite PooledServiceActivity that holds a reference to the underlying activity, once you are done /// working /// with the activity you must return it to the pool via PushActivity. /// </summary> /// <returns></returns> public PooledServiceActivity PopActivity() { PooledServiceActivity result; lock (_poolGuard) { if (_workflowPool.Count == 0) { if (_xamlStream == null) { result = new PooledServiceActivity(_generation, _workflowActivity); } else { Activity activity = ActivityXamlServices.Load(_xamlStream); _xamlStream.Seek(0, SeekOrigin.Begin); result = new PooledServiceActivity(_generation, activity); } } else result = _workflowPool.Dequeue(); } return result; }