Exemplo n.º 1
0
        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;
            }
        }
Exemplo n.º 2
0
            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);
            }
Exemplo n.º 3
0
            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);
            }