public void Enqueue(IHaveClusterKeyItem item) { var selectedIndex = option.ClusterIndexSelector.SelectIndex(item, clusters.Select(i => new ClusterInfo(i)).ToList()); clusters[selectedIndex].Enqueue(item); }
public void LogEnqueue(ClusterInfo info, IHaveClusterKeyItem item) { lock (syncObj) { LstEnqueue.Add(new EnqueueDequeResult(info, item, null, DateTime.Now)); } }
public void Enqueue(IHaveClusterKeyItem item) { TotalItemsEnqueueCount++; eventReadyQueue.Add(item); logger.LogEnqueue( CreateInfo(), item); }
public EnqueueDequeResult(ClusterInfo clusterInfo, IHaveClusterKeyItem item, ExecutionInfo executionInfo, DateTime time) { ClusterInfo = clusterInfo; Item = item; ExecutionInfo = executionInfo; Time = time; }
public void Enqueue(IHaveClusterKeyItem item) { var syncItem = (SyncItemWrapper)item; eventReadyQueue.Add(item); TotalItemsEnqueueCount++; logger.LogEnqueue(CreateInfo(), syncItem.Item); }
public ExecutionInfo Cluster(IHaveClusterKeyItem item) { var warpItem = new SyncItemWrapper(item); clusterProvider.Enqueue(warpItem); return(!warpItem.AutoResetEvent.WaitOne(TimeSpan.FromSeconds(option.SyncWaitTimeOutInSecond)) ? new ExecutionInfo(false, new TimeoutException("پایان مهلت زمانی برای دریافت پاسخ پردازش")) : warpItem.ExecutionInfo); }
public void LogExecute(ClusterInfo info, IHaveClusterKeyItem item, ExecutionInfo executionInfo) { lock (syncObj) { counter++; LstDequeue.Add(new EnqueueDequeResult(info, item, executionInfo, DateTime.Now)); if (counter == itemNumber) { autoResetEvent.Set(); } } }
public int SelectIndex(IHaveClusterKeyItem item, IReadOnlyList <ClusterInfo> clusters) { lock (syncObject) { if (clusterAssignmentDic.ContainsKey(item.Key)) { return(clusterAssignmentDic[item.Key].Index); } var index = 0; var minCount = clusters[0].ItemInQueueCount + clusters[0].TotalItemsDequeueCount; for (var i = 1; i < clusters.Count; i++) { if (clusters[i].ItemInQueueCount + clusters[i].TotalItemsDequeueCount < minCount) { index = i; } } var cluster = clusters[index]; clusterAssignmentDic.Add(item.Key, cluster); return(clusterAssignmentDic[item.Key].Index); } }
public SyncItemWrapper(IHaveClusterKeyItem item) { Item = item; AutoResetEvent = new AutoResetEvent(false); Id = Guid.NewGuid(); }
public void Cluster(IHaveClusterKeyItem item) { clusterProvider.Enqueue(item); }
public void Process(IHaveClusterKeyItem item) { File.AppendAllText($"test\\AsyncClusterTest\\test{clusterIndex}.dat", $"item Processed at {DateTime.Now.TimeOfDay} Key:{item.Key}" + Environment.NewLine); }
public void Process(IHaveClusterKeyItem item) { lstResult.Add($"item Processed at {DateTime.Now.TimeOfDay} Key:{item.Key}"); }