/// <summary> /// Добавить элемент в очередь /// </summary> /// <param name="item">Элемент</param> /// <param name="localQueue">Локальная очередь (если есть)</param> /// <param name="forceGlobal">Обязательное добавление в глобальную очередь</param> public void Add(ThreadPoolWorkItem item, ThreadPoolLocalQueue localQueue, bool forceGlobal) { TurboContract.Requires(item != null, conditionString: "item != null"); TurboContract.Assert(!_isDisposed, conditionString: "!_isDisposed"); try { } finally { if (forceGlobal || localQueue == null || !localQueue.TryAddLocal(item)) { bool addToMainRes = _globalQueue.TryAdd(item, -1); TurboContract.Assert(addToMainRes, conditionString: "addToMainRes"); } } }
/// <summary> /// Добавить элемент в очередь /// </summary> /// <param name="item">Элемент</param> /// <param name="localQueue">Локальная очередь (если есть)</param> /// <param name="forceGlobal">Обязательное добавление в глобальную очередь</param> public void Add(ThreadPoolWorkItem item, ThreadPoolLocalQueue localQueue, bool forceGlobal) { Contract.Requires(item != null); Debug.Assert(!_isDisposed); try { } finally { if (forceGlobal || localQueue == null || !localQueue.TryAddLocal(item)) { bool addToMainRes = _globalQueue.TryAdd(item, -1); Debug.Assert(addToMainRes); } } }
// ====================== /// <summary> /// Попробовать добавить элемент в очередь /// </summary> /// <param name="item">Элемент</param> /// <param name="localQueue">Локальная очередь потока (если есть)</param> /// <param name="forceGlobal">Обязательное добавление в глобальную очередь</param> /// <param name="timeout">Таймаут</param> /// <param name="token">Токен отмены</param> /// <returns>Удалось ли добавить</returns> public bool TryAdd(ThreadPoolWorkItem item, ThreadPoolLocalQueue localQueue, bool forceGlobal, int timeout, CancellationToken token) { TurboContract.Requires(item != null, conditionString: "item != null"); TurboContract.Assert(!_isDisposed, conditionString: "!_isDisposed"); if (localQueue != null && !forceGlobal) { bool added = false; try { } finally { added = localQueue.TryAddLocal(item); } if (added) { return(true); } } return(_globalQueue.TryAdd(item, timeout, token)); }
/// <summary> /// Попробовать добавить элемент в очередь /// </summary> /// <param name="item">Элемент</param> /// <param name="localQueue">Локальная очередь (если есть)</param> /// <param name="forceGlobal">Обязательное добавление в глобальную очередь</param> /// <returns>Удалось ли добавить</returns> public bool TryAdd(ThreadPoolWorkItem item, ThreadPoolLocalQueue localQueue, bool forceGlobal) { TurboContract.Requires(item != null, conditionString: "item != null"); TurboContract.Assert(!_isDisposed, conditionString: "!_isDisposed"); bool result = false; try { } finally { if (!forceGlobal && localQueue != null && localQueue.TryAddLocal(item)) { result = true; } else { result = _globalQueue.TryAdd(item, 0); } } return(result); }
/// <summary> /// Попробовать добавить элемент в очередь /// </summary> /// <param name="item">Элемент</param> /// <param name="localQueue">Локальная очередь (если есть)</param> /// <param name="forceGlobal">Обязательное добавление в глобальную очередь</param> /// <returns>Удалось ли добавить</returns> public bool TryAdd(ThreadPoolWorkItem item, ThreadPoolLocalQueue localQueue, bool forceGlobal) { Contract.Requires(item != null); Debug.Assert(!_isDisposed); bool result = false; try { } finally { if (!forceGlobal && localQueue != null && localQueue.TryAddLocal(item)) { result = true; } else { result = _globalQueue.TryAdd(item, 0); } } return(result); }