【发布时间】:2015-07-11 14:22:53
【问题描述】:
在 Microsoft Orleans,我正在尝试使用以下代码来实现可用工作列表之类的东西:
public Task<WorkResponse> PerformWork(WorkRequest request)
{
Console.WriteLine("Performing work for id: {0}", request.Param1);
Thread.Sleep(TimeSpan.FromSeconds(10));
var result = Task.FromResult(new WorkResponse(request.Param1, request.Param2, request.Param3));
Console.WriteLine("Completed work for id: {0}", request.Param1);
return result;
}
但是,如果我使用类似这样的代码启动许多任务,这将无法正常运行。
_work
.ToList()
.AsParallel()
.ForAll(x =>
{
Console.WriteLine("Requesting work for id: {0}", x.Key);
var worker = GrainFactory.GetGrain<IWork>(x.Key);
var response = worker.PerformWork(x.Value);
Console.WriteLine("Response for work id: {0}", x.Key);
});
但是,如果另一个节点加入集群,这个工作似乎永远不会移动到新节点。在该新节点上只会处理新安排的工作。
似乎如果奥尔良队列中有大量这种额外的工作,那么新节点就会被卡在加入集群中。
【问题讨论】:
标签: c# cluster-computing distributed-computing orleans