Program.cs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. using System;
  2. using System.Threading;
  3. using System.Threading.Tasks;
  4. namespace Example2_3
  5. {
  6. class Program
  7. {
  8. private static int loopCount = 0;
  9. private static long time;
  10. private static Action action;
  11. static void Main(string[] args)
  12. {
  13. Console.WriteLine($"主线程: {Thread.CurrentThread.ManagedThreadId}");
  14. Crontine();
  15. while (true)
  16. {
  17. Thread.Sleep(1);
  18. CheckTimerOut();
  19. ++loopCount;
  20. if (loopCount % 10000 == 0)
  21. {
  22. Console.WriteLine($"loop count: {loopCount}");
  23. }
  24. }
  25. }
  26. private static void Crontine()
  27. {
  28. WaitTimeAsync(5000, WaitTimeAsyncCallback1);
  29. }
  30. private static void WaitTimeAsyncCallback1()
  31. {
  32. Console.WriteLine($"当前线程: {Thread.CurrentThread.ManagedThreadId}, WaitTimeAsync finsih loopCount的值是: {loopCount}");
  33. WaitTimeAsync(4000, WaitTimeAsyncCallback2);
  34. }
  35. private static void WaitTimeAsyncCallback2()
  36. {
  37. Console.WriteLine($"当前线程: {Thread.CurrentThread.ManagedThreadId}, WaitTimeAsync finsih loopCount的值是: {loopCount}");
  38. WaitTimeAsync(3000, WaitTimeAsyncCallback3);
  39. }
  40. private static void WaitTimeAsyncCallback3()
  41. {
  42. Console.WriteLine($"当前线程: {Thread.CurrentThread.ManagedThreadId}, WaitTimeAsync finsih loopCount的值是: {loopCount}");
  43. }
  44. private static void CheckTimerOut()
  45. {
  46. if (time == 0)
  47. {
  48. return;
  49. }
  50. long nowTicks = DateTime.Now.Ticks / 10000;
  51. if (time > nowTicks)
  52. {
  53. return;
  54. }
  55. time = 0;
  56. action.Invoke();
  57. }
  58. private static void WaitTimeAsync(int waitTime, Action a)
  59. {
  60. time = DateTime.Now.Ticks / 10000 + waitTime;
  61. action = a;
  62. }
  63. }
  64. }