ITaskLeaseService.cs 935 Bytes
namespace Rcs.Application.Services;

/// <summary>
/// 任务级分布式租约服务。
/// 用于协调分配与执行阶段对同一任务的并发操作。
/// </summary>
public interface ITaskLeaseService
{
    Task<ITaskLeaseAcquireResult> TryAcquireAsync(
        Guid taskId,
        Guid? robotId,
        string purpose,
        CancellationToken ct = default);

    Task<bool> HasActiveLeaseAsync(Guid taskId, CancellationToken ct = default);
}

public interface ITaskLease : IAsyncDisposable
{
    Guid TaskId { get; }
    string LeaseKey { get; }
    string Purpose { get; }
}

public interface ITaskLeaseAcquireResult
{
    bool Success { get; }
    string Message { get; }
    ITaskLease? Lease { get; }
}

public sealed class TaskLeaseAcquireResult : ITaskLeaseAcquireResult
{
    public bool Success { get; init; }
    public string Message { get; init; } = string.Empty;
    public ITaskLease? Lease { get; init; }
}