コード例 #1
0
ファイル: Router.cs プロジェクト: thinklarge/SimpleActorTest
 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);
     }
 }
コード例 #2
0
        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.
        }
コード例 #3
0
 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}");
         }
     }
 }
コード例 #4
0
ファイル: Router.cs プロジェクト: thinklarge/SimpleActorTest
        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]);
        }