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); } }
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); }
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(); }