SignalR 是一個實時通信庫,通常用于在 Web 應用程序中實現實時通信功能。雖然 SignalR 本身并不是用于任務調度的工具,但是可以借助 SignalR 實現簡單的任務調度功能。下面是一個基本的示例來演示如何使用 SignalR 進行任務調度:
dotnet add package Microsoft.AspNetCore.SignalR
Hub
的 SignalR Hub 類,用于處理客戶端與服務端之間的通信:using Microsoft.AspNetCore.SignalR;
public class TaskSchedulerHub : Hub
{
public async Task ScheduleTask(string taskName, int delay)
{
await Task.Delay(delay);
await Clients.All.SendAsync("TaskCompleted", taskName);
}
}
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseSignalR(routes =>
{
routes.MapHub<TaskSchedulerHub>("/taskScheduler");
});
}
const connection = new signalR.HubConnectionBuilder()
.withUrl("/taskScheduler")
.build();
connection.on("TaskCompleted", taskName => {
console.log(`Task ${taskName} completed`);
});
connection.start()
.then(() => {
connection.invoke("ScheduleTask", "Task1", 5000);
connection.invoke("ScheduleTask", "Task2", 10000);
})
.catch(err => console.error(err));
通過以上步驟,你就可以使用 SignalR 實現簡單的任務調度功能了。當客戶端調用 ScheduleTask
方法時,服務端會延遲一定時間后發送任務完成通知給所有客戶端。你也可以根據實際需求擴展和優化這個示例。