Hợp đồng đồng thời
Trên trang này
Không gian tên: Nalix.Abstractions.Concurrency
Assembly: Nalix.Abstractions
Nalix.Abstractions.Concurrency định nghĩa các hợp đồng để lên lịch, giám sát và hủy các worker chạy lâu cùng công việc định kỳ do TaskManager trong Nalix.Framework.Tasks quản lý.
Ánh xạ mã nguồn
src/Nalix.Abstractions/Concurrency/ITaskManager.cssrc/Nalix.Abstractions/Concurrency/IWorker.cssrc/Nalix.Abstractions/Concurrency/WorkerAttribute.cssrc/Nalix.Abstractions/Concurrency/IWorkerHandle.cssrc/Nalix.Abstractions/Concurrency/IWorkerContext.cssrc/Nalix.Abstractions/Concurrency/IRecurringHandle.cssrc/Nalix.Abstractions/Concurrency/IWorkerOptions.cssrc/Nalix.Abstractions/Concurrency/IRecurringOptions.cs
Tổng quan thành phần công khai
| Kiểu | Thành phần công khai |
|---|---|
ITaskManager | Title, ConcurrencyLimitRatio, ScheduleWorker(...), ScheduleWorker<TState>(...), ScheduleWorker(IWorker), ScheduleRecurring(...), RunOnceAsync(...), CancelAllWorkers(), CancelWorker(ISnowflake), CancelGroup(string), CancelRecurring(string), GetWorkers(...), TryGetWorker(...), GetRecurring(), TryGetRecurring(...), WaitGroupAsync(...) |
IWorker | ValueTask ExecuteAsync(IWorkerContext context, CancellationToken cancellationToken = default) |
WorkerAttribute | WorkerAttribute(string name, string group), Name, Group, Tag, int Priority, IdType, RetainForMs, GroupConcurrencyLimit, Enabled, ProcessorAffinity |
IWorkerContext | ISnowflake Id, string Name, string Group, bool IsCancellationRequested, void Beat(), void Advance(long delta, string? note = null) |
IWorkerHandle : IDisposable | ISnowflake Id, string Name, string Group, long TotalRuns, long Progress, string? LastNote, IWorkerOptions Options, bool IsRunning, DateTimeOffset StartedUtc, DateTimeOffset? LastHeartbeatUtc |
IRecurringHandle : IDisposable | string Name, long TotalRuns, bool IsRunning, bool IsPaused, TimeSpan Interval, IRecurringOptions Options, int ConsecutiveFailures, DateTimeOffset? LastRunUtc, DateTimeOffset? NextRunUtc |
IWorkerOptions | Tag, MachineId, IdType, Priority, OnCompleted, OnFailed, ExecutionTimeout, RetainFor, GroupConcurrencyLimit, TryAcquireSlotImmediately, CancellationToken, OSPriority, ProcessorAffinity |
IRecurringOptions | Tag, Jitter, BackoffCap, ExecutionTimeout, NonReentrant, FailuresBeforeBackoff |
ITaskManager & IWorker
Bạn có thể lên lịch công việc nền bằng delegate, hoặc bằng cách triển khai IWorker và gắn attribute [Worker(name, group)] lên class:
using System.Threading;
using System.Threading.Tasks;
using Nalix.Abstractions.Concurrency;
[Worker("session.cleanup", "maintenance", Priority = (int)WorkerPriority.LOW, GroupConcurrencyLimit = 1)]
public sealed class SessionCleanupWorker : IWorker
{
public async ValueTask ExecuteAsync(IWorkerContext context, CancellationToken cancellationToken = default)
{
context.Beat();
context.Advance(100, "Cleanup completed");
await ValueTask.CompletedTask;
}
}
Lên lịch và hủy qua ITaskManager:
IWorkerHandle handle = taskManager.ScheduleWorker(new SessionCleanupWorker());
// Hủy theo Snowflake ID của worker:
taskManager.CancelWorker(handle.Id);
IWorkerContext
Được truyền vào mỗi lần thực thi worker để tác vụ báo cáo trạng thái còn hoạt động (Beat()) và tiến độ (Advance(delta, note)):
ISnowflake Id { get; }— Snowflake identifier duy nhất của lần chạy worker.string Name { get; }— Tên worker.string Group { get; }— Tên nhóm worker.bool IsCancellationRequested { get; }— Phản ánh việc hủy từCancelWorker,CancelGrouphoặcExecutionTimeout.void Beat()— Cập nhậtLastHeartbeatUtc.void Advance(long delta, string? note = null)— TăngProgress(long) và cập nhậtLastNote.