public bool TryPop(out ExecutionItem nextItem)
 {
     nextItem = null;
     if (ReferenceQueue.Count > 0)
     {
         nextItem = TransformToExecutionItem(ReferenceQueue.Dequeue());
         return(true);
     }
     else
     {
         return(false);
     }
 }
 /// <summary>
 /// Creates a new ExecutionItem instance for each supplied IProjectInvocationRule.
 /// </summary>
 private ExecutionItem[] CreateExecutionItems(IProjectInvocationRule[] rules)
 {
     var list = new List<ExecutionItem>();
     lock (m_ruleState) {
         foreach (IProjectInvocationRule rule in rules) {
             ProjectExecutionDetail detail;
             if (!m_ruleState.TryGetValue(rule.Id, out detail)) {
                 detail = ProjectExecutionDetail.Create(rule);
             }
             var item = new ExecutionItem(rule, detail);
             list.Add(item);
         }
     }
     return list.ToArray();
 }
 private static void SetupForLongInvocation(out ExecutionItem i, out IRuntimeManager manager)
 {
     var args = new MockProjectInvocationRuleSetupArgs() {
         CanExecute = true,
         UsesInput = false
     };
     int key = 1;
     var d = new ProjectExecutionDetail() { Key = key };
     i = CreateItem(args, d);
     var rmMock = new Mock<IRuntimeManager>();
     rmMock.Setup(m => m.Invoke(key)).Callback(() => Thread.Sleep(200));
     manager = rmMock.Object;
 }