public static ILoadBalancedHandle Execute(this ILoadBalancer lb, IEnumerator longRunningAction, int maxMillisecondsUsedPerFrame) { LoadBalancedActionPool.RecycledLongRunningAction recycledLongRunningAction; Ensure.ArgumentNotNull(longRunningAction, "longRunningAction"); if (LoadBalancedActionPool._longActions == null) { LoadBalancedActionPool._longActions = new Queue <LoadBalancedActionPool.RecycledLongRunningAction>(1); } if (LoadBalancedActionPool._longActions.Count <= 0) { recycledLongRunningAction = new LoadBalancedActionPool.RecycledLongRunningAction() { iter = longRunningAction, maxMillisecondsUsedPerFrame = maxMillisecondsUsedPerFrame }; } else { recycledLongRunningAction = LoadBalancedActionPool._longActions.Dequeue(); recycledLongRunningAction.iter = longRunningAction; recycledLongRunningAction.maxMillisecondsUsedPerFrame = maxMillisecondsUsedPerFrame; } return(lb.Add(recycledLongRunningAction)); }
private static void Return(LoadBalancedActionPool.RecycledLongRunningAction action) { action.iter = null; LoadBalancedActionPool._longActions.Enqueue(action); }