Tài liệu

WorkerOptions

Thời gian đọc 3 phút Gói: Nalix.Framework
Trên trang này

Không gian tên: Nalix.Framework.Options
Assembly: Nalix.Framework

WorkerOptions (public sealed class WorkerOptions : IWorkerOptions) cấu hình độ ưu tiên lập lịch theo worker, kiểm soát đồng thời theo nhóm, thời gian giữ lại sau khi hoàn thành, độ ưu tiên luồng HĐH và gắn lõi CPU trong TaskManager.ScheduleWorker.

Ánh xạ mã nguồn

  • src/Nalix.Abstractions/Concurrency/IWorkerOptions.cs
  • src/Nalix.Framework/Options/WorkerOptions.cs
  • src/Nalix.Framework/Tasks/TaskManager.Affinity.cs

Thuộc tính công khai

Thuộc tínhKiểuTruy cậpMặc địnhMô tả
Tagstring?get; set;nullThẻ chẩn đoán tùy chọn để nhóm hoặc lọc worker trong báo cáo.
MachineIdushortget; set;1Machine ID 10-bit được nhúng vào định danh ISnowflake của worker.
IdTypeSnowflakeTypeget; set;SnowflakeType.SystemSnowflakeType được nhúng vào định danh ISnowflake của worker.
PriorityWorkerPriorityget; set;WorkerPriority.NORMALĐộ ưu tiên hàng đợi (LOW, NORMAL, HIGH, URGENT) khi chờ một slot đồng thời.
ExecutionTimeoutTimeSpan?get;nullNgân sách timeout thực thi tùy chọn (đọc qua IWorkerOptions.ExecutionTimeout).
RetainForTimeSpan?get; set;2 min (TimeSpan.FromMinutes(2))Thời gian các worker đã kết thúc còn nằm trong TaskManager để kiểm tra chẩn đoán (null hoặc TimeSpan.Zero sẽ xóa ngay khi hoàn thành).
GroupConcurrencyLimitint?get; set;nullSố worker đồng thời tối đa được phép trong group của worker (tùy chọn).
TryAcquireSlotImmediatelyboolget; set;falseKhi true, hủy worker ngay nếu không có slot nhóm/toàn cục, thay vì xếp hàng chờ.
CancellationTokenCancellationTokenget; set;CancellationToken.NoneToken hủy bên ngoài, được liên kết vào CancellationTokenSource nội bộ của worker.
OnCompletedAction<IWorkerHandle>?get; set;nullCallback được gọi khi worker kết thúc mà không ném ngoại lệ.
OnFailedAction<IWorkerHandle, Exception>?get; set;nullCallback được gọi khi worker lỗi do ngoại lệ không được xử lý.
OSPriorityThreadPriority?get; set;nullĐộ ưu tiên luồng HĐH tùy chọn. Khi được đặt, TaskManager chạy worker trên một luồng riêng thay vì ThreadPool.
ProcessorAffinityint?get; set;nullChỉ số lõi CPU tùy chọn (bắt đầu từ 0) để gắn luồng (áp dụng trên Windows và Linux khi OSPriority cũng được đặt).

Ví dụ sử dụng

using System;
using System.Threading;
using Nalix.Abstractions.Concurrency;
using Nalix.Abstractions.Identity;
using Nalix.Framework.Options;

WorkerOptions options = new()
{
    Tag = "wal-flush",
    MachineId = 1,
    IdType = SnowflakeType.System,
    Priority = WorkerPriority.HIGH,
    GroupConcurrencyLimit = 1,
    TryAcquireSlotImmediately = false,
    RetainFor = TimeSpan.FromMinutes(5),
    OSPriority = ThreadPriority.AboveNormal,
    ProcessorAffinity = 0
};

API liên quan