public void Recieve(Workload workloadSize, Guid?workloadId = null) { if (this.emptyActors.Any()) { var actor = this.emptyActors.Dequeue(); actor.Recieve(workloadSize, actor.Id); } else { this.workloads.Enqueue(workloadSize); } }
public void Recieve(Workload workloadSize, Guid?workerId = null) { tasks.Enqueue( async() => { Console.WriteLine($"worker - {this.Id} workloadId - {workloadSize.workId}"); await Task.Delay(workloadSize.delayTime); workloadSize.isFinished = true; this.Context.Router.UpdateWorkload(workloadSize, this.Id); }); Task.Run(async() => await ExecuteNext()); // TODO: Look into whether or not this will run an infinite chain. }
public void Recieve(Workload workload, Guid?workloadId = null) { if (workloadId == null) { this.work[workload.workId] = workload; this.Router.Recieve(workload, this.Id); } else { if (!this.work[workload.workId].isFinished) { Console.WriteLine($"Work not finished {workload.workId} {workloadId}"); this.work[workload.workId] = workload; total += workload.size * workload.workId; } else { Console.WriteLine($"Work finished {workload.workId} {workloadId}"); } } }
public void UpdateWorkload(Workload workload, Guid id) { this.Context.Parent.Recieve(workload, id); if (!this.actors.ContainsKey(id)) { return; } if (this.workloads.Count > 0) { var work = workloads.Dequeue(); this.actors[id].Recieve(work, this.Id); if (workload.workId % 4 == 0) // Artificially remove a node { this.RemoveActor(); } return; } this.emptyActors.Enqueue(this.actors[id]); }