public async Task <INode <TState, TCost> > StepAsync() { if (Result.IsCompleted) { return(Result.Result); } try { //System.Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId}: Step started."); return(await OpenNodes.PerformWorkerOperationAsync( async node => { Diag_NodeTraversing?.Invoke(node); if (Problem.Comparer.Compare(node.EstimatedDistance, Scenario.AcceptedDistance) <= 0) //Found a goal node { lock (ResultSetter) { ResultSetter.SetResult(node); WorkTokenSource.Cancel(); return node; } } var newnodes = (await Problem.ExpandNode(new NodeExpansionImplementation(this, node))).ToList(); foreach (var newnode in newnodes) { OpenNodes.Add(newnode); } Diag_NodeTraversed?.Invoke(node); return node; })); } catch (NodeRepository <TState, TCost> .QueueExhaustedException) { if (Result.IsCompleted) { return(Result.Result); } if (Result.IsFaulted) { throw Result.Exception; } var ex = new MissingSolutionException(); ResultSetter.TrySetException(ex); throw ex; } catch (Exception e) { ResultSetter.TrySetException(e); throw; } }
public void ReplyCode_should_be_541_with_specific_ReplyText() { var ads = new AppDomainSetup { ApplicationBase = AppDomain.CurrentDomain.BaseDirectory }; var domain = AppDomain.CreateDomain("test connection shutdown", null, ads); var runner = (IRunner)domain.CreateInstanceAndUnwrap(typeof(Runner).Assembly.FullName, typeof(Runner).FullName); var setter = new ResultSetter(); runner.Run(setter); AppDomain.Unload(domain); Assert.AreEqual(541, setter.ReplyCode); Assert.AreEqual("Domain Unload", setter.ReplyText); }
public void ReplyCode_should_be_541_with_specific_ReplyText() { var ads = new AppDomainSetup {ApplicationBase = AppDomain.CurrentDomain.BaseDirectory}; var domain = AppDomain.CreateDomain("test connection shutdown", null, ads); var runner = (IRunner)domain.CreateInstanceAndUnwrap(typeof (Runner).Assembly.FullName, typeof (Runner).FullName); var setter = new ResultSetter(); runner.Run(setter); AppDomain.Unload(domain); Assert.AreEqual(541, setter.ReplyCode); Assert.AreEqual("Domain Unload", setter.ReplyText); }