Пример #1
0
        public void Enqueue(IHaveClusterKeyItem item)
        {
            var selectedIndex =
                option.ClusterIndexSelector.SelectIndex(item, clusters.Select(i => new ClusterInfo(i)).ToList());

            clusters[selectedIndex].Enqueue(item);
        }
Пример #2
0
 public void LogEnqueue(ClusterInfo info, IHaveClusterKeyItem item)
 {
     lock (syncObj)
     {
         LstEnqueue.Add(new EnqueueDequeResult(info, item, null, DateTime.Now));
     }
 }
Пример #3
0
 public void Enqueue(IHaveClusterKeyItem item)
 {
     TotalItemsEnqueueCount++;
     eventReadyQueue.Add(item);
     logger.LogEnqueue(
         CreateInfo(),
         item);
 }
Пример #4
0
 public EnqueueDequeResult(ClusterInfo clusterInfo, IHaveClusterKeyItem item, ExecutionInfo executionInfo,
                           DateTime time)
 {
     ClusterInfo   = clusterInfo;
     Item          = item;
     ExecutionInfo = executionInfo;
     Time          = time;
 }
Пример #5
0
        public void Enqueue(IHaveClusterKeyItem item)
        {
            var syncItem = (SyncItemWrapper)item;

            eventReadyQueue.Add(item);
            TotalItemsEnqueueCount++;
            logger.LogEnqueue(CreateInfo(), syncItem.Item);
        }
Пример #6
0
        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);
        }
Пример #7
0
 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();
         }
     }
 }
Пример #8
0
 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);
     }
 }
Пример #9
0
 public SyncItemWrapper(IHaveClusterKeyItem item)
 {
     Item           = item;
     AutoResetEvent = new AutoResetEvent(false);
     Id             = Guid.NewGuid();
 }
Пример #10
0
 public void Cluster(IHaveClusterKeyItem item)
 {
     clusterProvider.Enqueue(item);
 }
Пример #11
0
 public void Process(IHaveClusterKeyItem item)
 {
     File.AppendAllText($"test\\AsyncClusterTest\\test{clusterIndex}.dat",
                        $"item Processed at {DateTime.Now.TimeOfDay} Key:{item.Key}" +
                        Environment.NewLine);
 }
Пример #12
0
 public void Process(IHaveClusterKeyItem item)
 {
     lstResult.Add($"item Processed at {DateTime.Now.TimeOfDay} Key:{item.Key}");
 }