private void PumpAssetLoading() { lock (_syncObj) { if (_internalAssetQueue.Count > 0) { AssetLoadRequest task = _internalAssetQueue.Dequeue(); if (task.UseCustomFunction) { Action handler = null; handler = () => { // ReSharper disable once DelegateSubtraction task.OnDone -= handler; OnTaskCompletedAdd(task); }; task.OnDone += handler; task.Load(); _runningTaskCount++; return; } if (_runningTaskCount == MAXJOBS) { return; } if (task.Block) { task.Load(); while (!task.IsDone) { } task.OnComplete(); } else { QueueUserWorkItem(task); } } } }
private void QueueUserWorkItem(AssetLoadRequest asset) { Action completionTask = () => { asset.Load(); while (!asset.IsDone) { } OnTaskCompletedAdd(asset); }; _runningTaskCount++; ThreadPool.QueueUserWorkItem(_ => completionTask()); }