Example #1
0
        public void TestWaitForSignalOrDelayVersion1()
        {
            var a = new WaitForSignalOrDelay()
            {
                Duration     = TimeSpan.FromSeconds(10),
                BookmarkName = "Wakeup",
            };

            var definitionIdentity = new WorkflowIdentity("WaitForSignalOrDelay", new Version(1, 0), null);

            AutoResetEvent syncEvent = new AutoResetEvent(false);

            bool completed1 = false;
            bool unloaded1  = false;
            var  app        = new WorkflowApplication(a, definitionIdentity)
            {
                InstanceStore   = WFDefinitionStore.Instance.Store,
                PersistableIdle = (eventArgs) =>
                {
                    return(PersistableIdleAction.Unload);
                },

                OnUnhandledException = (e) =>
                {
                    return(UnhandledExceptionAction.Abort);
                },

                Completed = delegate(WorkflowApplicationCompletedEventArgs e)
                {
                    completed1 = true;
                    syncEvent.Set();
                },


                Unloaded = (eventArgs) =>
                {
                    unloaded1 = true;
                    syncEvent.Set();
                },
            };

            var id = app.Id;

            app.Run();


            syncEvent.WaitOne();
            Assert.False(completed1);
            Assert.True(unloaded1);

            WFDefinitionIdentityStore.Instance.TryAdd(definitionIdentity, a);

            Thread.Sleep(5000); // from 1 seconds to 9 seconds, the total time of the test case is the same.

            var outputs = LoadAndCompleteLongRunning(id, definitionIdentity);

            Assert.False((bool)outputs["Result"]);
        }
Example #2
0
        public void TestWaitForSignalOrDelayWithBookmarkToWakup()
        {
            var bookmarkName = "Wakup Now";
            var a            = new WaitForSignalOrDelay()
            {
                Duration     = TimeSpan.FromSeconds(10),
                BookmarkName = bookmarkName,
            };

            AutoResetEvent syncEvent = new AutoResetEvent(false);

            bool completed1 = false;
            bool unloaded1  = false;
            IDictionary <string, object> outputs = null;
            var app = new WorkflowApplication(a)
            {
                InstanceStore   = WFDefinitionStore.Instance.Store,
                PersistableIdle = (eventArgs) =>
                {
                    return(PersistableIdleAction.Unload);
                },

                OnUnhandledException = (e) =>
                {
                    return(UnhandledExceptionAction.Abort);
                },

                Completed = delegate(WorkflowApplicationCompletedEventArgs e)
                {
                    completed1 = true;
                    outputs    = e.Outputs;
                    syncEvent.Set();
                },

                Aborted = (eventArgs) =>
                {
                },

                Unloaded = (eventArgs) =>
                {
                    unloaded1 = true;
                    syncEvent.Set();
                }
            };

            var id = app.Id;

            app.Run();
            syncEvent.WaitOne();

            Assert.False(completed1);
            Assert.True(unloaded1);

            outputs = LoadWithBookmarkAndComplete(a, id, bookmarkName, null);//Wakup does not need bookmark value
            Assert.True((bool)outputs["Result"]);
        }