protected IEnumerator Job()
        {
            while (_isAlive)
            {
                for (int i = 0; i < _generatingFrequency; i++)
                {
                    if (_requests.Count == 0)
                    {
                        break;
                    }

                    CancelableRequest request = _requests.Dequeue();
                    if (request.isCanceled)
                    {
                        i--;
                        continue;
                    }

                    O output = _job.Invoke(request.input);
                    request.onJobDone?.Invoke(output);
                }

                yield return(null);
            }
        }
Exemplo n.º 2
0
        public override void TryRemoveRequest(I input)
        {
            CancelableRequest request = _requests.FirstOrDefault(request => request.input.Equals(input));

            if (request != default)
            {
                request.isCanceled = true;
            }
        }
        public override void MakeRequest(I input, UnityAction <O> onJobDone)
        {
            var request = new CancelableRequest()
            {
                input = input, onJobDone = onJobDone
            };

            _requests.Enqueue(request);
        }
Exemplo n.º 4
0
        public override void MakeRequest(I input, UnityAction <O> onJobDone)
        {
            var request = new CancelableRequest()
            {
                input = input, onJobDone = onJobDone
            };

            _requests.Enqueue(request);

            var jobInfo = new JobInfo {
                request = request, responses = _responses, job = _job
            };

            if (!_jobInfos.TryAdd(jobInfo.GetHashCode(), jobInfo))
            {
                Debug.LogError($"Failed to add Request in {GetType()}.");
            }

            var workerJob = new WorkerJob {
                workerId = GetHashCode(), jobId = jobInfo.GetHashCode()
            };

            workerJob.Schedule();
        }