網頁: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!`")); } } }
在此,我們將此工作流程定義為單例。單例工作流將永遠只運行一個實例。 在此示例中,這是合適的,因為我們不想每次計時器后台運行程序計時時都生成新的工作流實例。
更新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>(); } } }
請注意,我們不必自己手動調用工作流。而是由 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