ThreadedRunner.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. using System;
  2. using System.Threading;
  3. #if NET_STANDARD_2_0
  4. using System.Threading.Tasks;
  5. #endif
  6. namespace BestHTTP.PlatformSupport.Threading
  7. {
  8. public static class ThreadedRunner
  9. {
  10. public static void SetThreadName(string name)
  11. {
  12. try
  13. {
  14. System.Threading.Thread.CurrentThread.Name = name;
  15. }
  16. catch(Exception ex)
  17. {
  18. if (HTTPManager.Logger.Level == Logger.Loglevels.All)
  19. HTTPManager.Logger.Exception("ThreadedRunner", "SetThreadName", ex);
  20. }
  21. }
  22. public static void RunShortLiving<T>(Action<T> job, T param)
  23. {
  24. #if NETFX_CORE
  25. #pragma warning disable 4014
  26. Windows.System.Threading.ThreadPool.RunAsync(_ => job(param));
  27. #pragma warning restore 4014
  28. #elif NET_STANDARD_2_0
  29. var _task = new Task(() => job(param));
  30. _task.ConfigureAwait(false);
  31. _task.Start();
  32. #else
  33. ThreadPool.QueueUserWorkItem(new WaitCallback(_ => job(param)));
  34. #endif
  35. }
  36. public static void RunShortLiving<T1, T2>(Action<T1, T2> job, T1 param1, T2 param2)
  37. {
  38. #if NETFX_CORE
  39. #pragma warning disable 4014
  40. Windows.System.Threading.ThreadPool.RunAsync((param) => job(param1, param2));
  41. #pragma warning restore 4014
  42. #elif NET_STANDARD_2_0
  43. var _task = new Task(() => job(param1, param2));
  44. _task.ConfigureAwait(false);
  45. _task.Start();
  46. #else
  47. ThreadPool.QueueUserWorkItem(new WaitCallback(_ => job(param1, param2)));
  48. #endif
  49. }
  50. public static void RunShortLiving<T1, T2, T3>(Action<T1, T2, T3> job, T1 param1, T2 param2, T3 param3)
  51. {
  52. #if NETFX_CORE
  53. #pragma warning disable 4014
  54. Windows.System.Threading.ThreadPool.RunAsync((param) => job(param1, param2, param3));
  55. #pragma warning restore 4014
  56. #elif NET_STANDARD_2_0
  57. var _task = new Task(() => job(param1, param2, param3));
  58. _task.ConfigureAwait(false);
  59. _task.Start();
  60. #else
  61. ThreadPool.QueueUserWorkItem(new WaitCallback(_ => job(param1, param2, param3)));
  62. #endif
  63. }
  64. public static void RunShortLiving<T1, T2, T3, T4>(Action<T1, T2, T3, T4> job, T1 param1, T2 param2, T3 param3, T4 param4)
  65. {
  66. #if NETFX_CORE
  67. #pragma warning disable 4014
  68. Windows.System.Threading.ThreadPool.RunAsync((param) => job(param1, param2, param3, param4));
  69. #pragma warning restore 4014
  70. #elif NET_STANDARD_2_0
  71. var _task = new Task(() => job(param1, param2, param3, param4));
  72. _task.ConfigureAwait(false);
  73. _task.Start();
  74. #else
  75. ThreadPool.QueueUserWorkItem(new WaitCallback(_ => job(param1, param2, param3, param4)));
  76. #endif
  77. }
  78. public static void RunShortLiving(Action job)
  79. {
  80. #if NETFX_CORE
  81. #pragma warning disable 4014
  82. Windows.System.Threading.ThreadPool.RunAsync((param) => job());
  83. #pragma warning restore 4014
  84. #elif NET_STANDARD_2_0
  85. var _task = new Task(() => job());
  86. _task.ConfigureAwait(false);
  87. _task.Start();
  88. #else
  89. ThreadPool.QueueUserWorkItem(new WaitCallback((param) => job()));
  90. #endif
  91. }
  92. public static void RunLongLiving(Action job)
  93. {
  94. #if NETFX_CORE
  95. #pragma warning disable 4014
  96. Windows.System.Threading.ThreadPool.RunAsync((param) => job());
  97. #pragma warning restore 4014
  98. #elif NET_STANDARD_2_0
  99. var _task = new Task(() => job(), TaskCreationOptions.LongRunning);
  100. _task.ConfigureAwait(false);
  101. _task.Start();
  102. #else
  103. var thread = new Thread(new ParameterizedThreadStart((param) => job()));
  104. thread.IsBackground = true;
  105. thread.Start();
  106. #endif
  107. }
  108. }
  109. }