CancellationTokenExtensions.cs 673 B

12345678910111213141516171819202122
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading;
  6. using System.Threading.Tasks;
  7. namespace Ips.Library.Basic
  8. {
  9. public static class CancellationTokenExtensions
  10. {
  11. public static CancellationToken LinkTimeout(this CancellationToken token, int timeout)
  12. {
  13. if (timeout <= 0) return token;
  14. var cts = new CancellationTokenSource();
  15. cts.CancelAfter(timeout * 1000);
  16. var timeoutToken = cts.Token;
  17. var linkedCts = CancellationTokenSource.CreateLinkedTokenSource(timeoutToken, token);
  18. return linkedCts.Token;
  19. }
  20. }
  21. }