.Net工作流elsa-workflows官方文檔學習:創建並運行定期工作流


網頁:https://elsa-workflows.github.io/elsa-core/docs/guides-recurring-task

在本節中,我們將執行以下操作:

  •  以編程方式定義一個工作流,使用TimerEvent活動每5秒自動執行一次。

讓我們開始吧!

創建控制台項目

創建一個名為Elsa.Guides.RecurringTask.ConsoleApp的新.NET Core控制台項目,並添加以下軟件包:

  • Elsa.Core
  • Elsa.Activities.Console
  • Elsa.Activities.Timers
  • Microsoft.Extensions.Hosting

定義工作流

創建一個名為RecurringTaskWorkflow的新類,並添加以下代碼:

 

using System;
using Elsa.Activities.Console.Activities;
using Elsa.Activities.Timers.Activities;
using Elsa.Expressions;
using Elsa.Services;
using Elsa.Services.Models;
using NodaTime;

namespace Elsa.Guides.RecurringTask.ConsoleApp
{
    public class RecurringTaskWorkflow : IWorkflow
    {
        public void Build(IWorkflowBuilder builder)
        {
            builder
                .AsSingleton()
                .StartWith<TimerEvent>(x => x.TimeoutExpression = new LiteralExpression<TimeSpan>("00:00:05"))
                .Then<WriteLine>(x => x.TextExpression = new JavaScriptExpression<string>("`It's now ${new Date()}. Let's do this thing!`"));
        }
    }
}
View Code

 

在此,我們將此工作流程定義為單例。單例工作流將永遠只運行一個實例。 在此示例中,這是合適的,因為我們不想每次計時器后台運行程序計時時都生成新的工作流實例。

更新Program程序

接下來,打開 Program.cs 並插入以下代碼:

 

using System;
using System.Threading.Tasks;
using Elsa.Activities.Console.Activities;
using Elsa.Activities.Console.Extensions;
using Elsa.Activities.Timers.Extensions;
using Elsa.Expressions;
using Elsa.Extensions;
using Elsa.Services;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using NodaTime;

namespace Elsa.Guides.RecurringTask.ConsoleApp
{
    class Program
    {
        static async Task Main(string[] args)
        {
            var host = new HostBuilder()
                .ConfigureServices(ConfigureServices)
                .ConfigureLogging(logging => logging.AddConsole())
                .UseConsoleLifetime()
                .Build();

            using (host)
            {
                await host.StartAsync();
                await host.WaitForShutdownAsync();
            }
        }

        private static void ConfigureServices(IServiceCollection services)
        {
            services
                .AddWorkflows()
                .AddConsoleActivities()
                .AddTimerActivities(options => options.Configure(x => x.SweepInterval = Duration.FromSeconds(1)))
                .AddWorkflow<RecurringTaskWorkflow>();
        }
    }
}
View Code

 

請注意,我們不必自己手動調用工作流。而是由 HostBuilder 構建的主機內部執行的后台任務來處理。

運行

執行以下命令運行程序:

dotnet run Elsa.Guides.RecurringTask.ConsoleApp.csproj

5秒后,你會看到如下輸出:

It's now Tue Sep 17 2019 16:28:40 GMT+02:00. Let's do this thing!
It's now Tue Sep 17 2019 16:28:46 GMT+02:00. Let's do this thing!
It's now Tue Sep 17 2019 16:28:52 GMT+02:00. Let's do this thing!

總結

在本指南中,我們已經了解了如何設置使用 TimerEvent 活動觸發的工作流。

源碼

https://github.com/elsa-workflows/elsa-guides/tree/master/src/Elsa.Guides.RecurringTask.ConsoleApp

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM