예제 #1
0
        public void TestSleepingWorkflowWithBookmarkToWakup()
        {
            var bookmarkName = "Wakup Now";
            var a            = new WaitForSignalOrDelayWorkflow()
            {
                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);

            app.InstanceStore   = WFDefinitionStore.Instance.Store;
            app.PersistableIdle = (eventArgs) =>
            {
                return(PersistableIdleAction.Unload);
            };

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

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

            app.Aborted = (eventArgs) =>
            {
            };

            app.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.Equal("Someone waked me up", (string)outputs["Result"]);
        }
예제 #2
0
        public Guid Create(string bookmarkName, TimeSpan duration)
        {
            var a = new WaitForSignalOrDelayWorkflow()
            {
                Duration     = TimeSpan.FromSeconds(10),
                BookmarkName = bookmarkName,
            };

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

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

                Completed = delegate(WorkflowApplicationCompletedEventArgs e)
                {
                },

                Aborted = (eventArgs) =>
                {
                },

                Unloaded = (eventArgs) =>
                {
                }
            };

            var id = app.Id;

            app.Run();
            return(id);
        }