IProcessLocker.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace SKMC.Api.Process.Control
  7. {
  8. /// <summary>
  9. /// <para>流程锁</para>
  10. /// <para>适用于多个执行单元需要互锁的场景</para>
  11. /// </summary>
  12. public interface IProcessLocker
  13. {
  14. /// <summary>
  15. /// <para>尝试获取流程锁, 如果锁已被占用则会持续阻塞</para>
  16. /// <para>如果返回true表示获取锁成功, 可继续执行后续代码</para>
  17. /// <para>如果返回false表示获取锁失败, 可能是有线程执行了ExitLock让该锁失效</para>
  18. /// <para>注意:如果获取锁失败, 同样也会执行后续代码可能导致锁定失败! 需要对该返回值进行判断处理</para>
  19. /// </summary>
  20. /// <param name="handler">尝试获取锁的对象Id, 如果不传对象Id默认为-1表示公共对象</param>
  21. /// <returns>true: 成功获取锁, false: 锁已失效</returns>
  22. bool StartLock(int handler = -1);
  23. /// <summary>
  24. /// <para>归还/重置流程锁, 任何线程均可执行</para>
  25. /// <para>如果尝试释放锁的对象Id不为当前占用锁的对象Id则释放无效</para>
  26. /// </summary>
  27. /// <param name="handler">尝试释放锁的对象Id, 如果不传对象Id默认为-1表示公共对象</param>
  28. void EndLock(int handler = -1);
  29. /// <summary>
  30. /// <para>退出锁并让所有执行了StartLock正在阻塞的线程都释放并返回获取锁结果为false</para>
  31. /// <param name="handler">尝试释放锁的对象Id, 如果不传对象Id默认为-1表示公共对象</param>
  32. /// </summary>
  33. void ExitLock(int handler = -1);
  34. /// <summary>
  35. /// 强制退出锁(忽略锁的占用对象)并重置锁状态
  36. /// </summary>
  37. void ResetLock();
  38. }
  39. }