From e55b957028b53f8519d7704a862a6ac85e0fd0f1 Mon Sep 17 00:00:00 2001 From: Jeffery Date: Mon, 18 Mar 2024 10:43:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=96=B9=E6=B3=95=E7=B7=B4?= =?UTF-8?q?=E7=BF=92=E9=A1=AF=E7=A4=BA=E8=99=95=E7=90=86=E9=80=B2=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/JobController.cs | 43 +++++++++++++++++- .../Extensions/HangfireExtension.cs | 10 +++- .../HangfireExample.WebService.csproj | 2 + HangfireExample.WebService/HangfireExample.db | Bin 159744 -> 212992 bytes .../Services/IJobService.cs | 1 + HangfireExample/Program.cs | 1 - 6 files changed, 52 insertions(+), 5 deletions(-) diff --git a/HangfireExample.WebService/Controllers/JobController.cs b/HangfireExample.WebService/Controllers/JobController.cs index af86580..0800546 100644 --- a/HangfireExample.WebService/Controllers/JobController.cs +++ b/HangfireExample.WebService/Controllers/JobController.cs @@ -1,6 +1,8 @@ using Hangfire; +using Hangfire.Console; +using Hangfire.PerformContextAccessor; +using Hangfire.Server; using HangfireExample.WebService.Services; -using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System.ComponentModel; @@ -10,7 +12,12 @@ namespace HangfireExample.WebService.Controllers [ApiController] public class JobController : ControllerBase, IJobService { - public JobController() { } + public JobController(IPerformContextAccessor perform) + { + this.perform = perform; + } + + private readonly IPerformContextAccessor perform; [HttpPost("Continuation", Name = "Continuation"), Produces("application/json")] public string Continuation(string message, string jobId) @@ -72,5 +79,37 @@ namespace HangfireExample.WebService.Controllers { Console.WriteLine("{0}: {1}", DateTimeOffset.Now, message); } + + [HttpPost("Progress", Name = "Progress"), Produces("application/json")] + public string Progress(int seconds) + { + return BackgroundJob.Enqueue(() => ProgressJob(perform.PerformingContext, seconds)); + } + + [NonAction] + [DisplayName("Progress, Seconds = {1}")] + public void ProgressJob(PerformContext context, int seconds) + { + var bar = context.WriteProgressBar(); + + context.WriteLine("The text color change to red"); + + context.SetTextColor(ConsoleTextColor.Red); + + context.WriteLine("This progress is ready to start"); + + context.ResetTextColor(); + + foreach (var i in Enumerable.Range(0, seconds).ToList().WithProgress(bar)) + { + Thread.Sleep(1000); + } + + context.SetTextColor(ConsoleTextColor.Green); + + context.WriteLine("This progress has finished"); + + context.ResetTextColor(); + } } } diff --git a/HangfireExample.WebService/Extensions/HangfireExtension.cs b/HangfireExample.WebService/Extensions/HangfireExtension.cs index 0f26f85..0e775d2 100644 --- a/HangfireExample.WebService/Extensions/HangfireExtension.cs +++ b/HangfireExample.WebService/Extensions/HangfireExtension.cs @@ -1,5 +1,7 @@ using Hangfire; +using Hangfire.Console; using Hangfire.Dashboard; +using Hangfire.PerformContextAccessor; using Hangfire.Storage.SQLite; using HangfireExample.WebService.Filters; @@ -17,9 +19,13 @@ namespace HangfireExample.WebService.Extensions /// public static IServiceCollection AddHangfire(this IServiceCollection services) { + // 將 Hangfire 處理序存取加入服務 + services.AddHangfirePerformContextAccessor(); // 將 Hangfire 加入服務,使用 SQLite 作為儲存區 services.AddHangfire(configuration => configuration - .UseSQLiteStorage("HangfireExample.db")); + .UseSQLiteStorage("HangfireExample.db") + .UsePerformContextAccessorFilter() + .UseConsole()); // 將 Hangfire Server 加入服務 services.AddHangfireServer(options => { @@ -38,7 +44,7 @@ namespace HangfireExample.WebService.Extensions { Authorization = [new DashboardAuthorizationFilter()], // 指定 Dashboard 指定讀取,不能操作,如重新執行、再次加入排程與刪除任務等 - IsReadOnlyFunc = (DashboardContext context) => true, + IsReadOnlyFunc = (DashboardContext context) => false, // 指定 Back to site 的連結 AppPath = "/swagger", }); diff --git a/HangfireExample.WebService/HangfireExample.WebService.csproj b/HangfireExample.WebService/HangfireExample.WebService.csproj index 801b9ed..d475235 100644 --- a/HangfireExample.WebService/HangfireExample.WebService.csproj +++ b/HangfireExample.WebService/HangfireExample.WebService.csproj @@ -7,7 +7,9 @@ + + diff --git a/HangfireExample.WebService/HangfireExample.db b/HangfireExample.WebService/HangfireExample.db index 957072fab91ee894952e06e7c5b067f0dbee61ea..d8497c0be4cda9152563eeb52978f88abe2ec174 100644 GIT binary patch literal 212992 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 delta 6704 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 P*>>O;69w&GCyD