示例#1
0
        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);
                    }
                }
            }
        }
示例#2
0
        private void QueueUserWorkItem(AssetLoadRequest asset)
        {
            Action completionTask = () =>
            {
                asset.Load();

                while (!asset.IsDone)
                {
                }

                OnTaskCompletedAdd(asset);
            };

            _runningTaskCount++;

            ThreadPool.QueueUserWorkItem(_ => completionTask());
        }