Advertisement
Guest User

Untitled

a guest
Jan 16th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.77 KB | None | 0 0
  1. public static class ApiManager
  2. {
  3. static Queue<ApiTask> apiTasks = new Queue<ApiTask>();
  4. static Thread thread;
  5. static AutoResetEvent wakeUp;
  6.  
  7. public static void Init() // <--1
  8. {
  9. wakeUp = new AutoResetEvent(false);
  10. thread = new Thread(runner);
  11. thread.Start();
  12. }
  13.  
  14. public static void AddTask(ApiTask task) //<--5
  15. {
  16. apiTasks.Enqueue(task);
  17. wakeUp.Set();
  18. }
  19.  
  20. static void runner()
  21. {
  22. wakeUp.Reset();
  23. while (true) //<--2
  24. {
  25. wakeUp.WaitOne(); //<--3
  26. while (apiTasks.Count > 0)
  27. {
  28. var task = apiTasks.Dequeue(); //<--4
  29. task.Start();
  30. }
  31. wakeUp.Reset();
  32. }
  33. }
  34. }
  35.  
  36. public abstract class ApiTask
  37. {
  38. protected abstract void DoJob(); //<-- 1
  39. protected AutoResetEvent IsDone = new AutoResetEvent(false);
  40. protected Exception RegisteredException = null;
  41.  
  42. internal void Run()
  43. {
  44. }
  45.  
  46. public void Start()
  47. {
  48. try
  49. {
  50. DoJob();
  51. }
  52. catch (Exception ex)
  53. {
  54. this.RegisteredException = ex;
  55. }
  56.  
  57. IsDone.Set();
  58. }
  59. }
  60.  
  61. public abstract class ApiTask<TResult> : ApiTask where TResult : new()
  62. {
  63. protected TResult Result = new TResult();
  64.  
  65. public TResult GetResult()
  66. {
  67. ApiManager.AddTask(this);
  68. this.IsDone.WaitOne();
  69.  
  70. if (RegisteredException != null) throw RegisteredException;
  71. return Result;
  72. }
  73. }
  74.  
  75. public abstract class CreateDocumentTask:ApiTask<APIDocument>
  76. {
  77. DateTime _date;
  78.  
  79. protected int CreateDocumentTask(DateTime date)
  80. {
  81. _date = date;
  82. }
  83.  
  84. protected override void DoJob()
  85. {
  86. Result = APICREATEDOCUMENTFUNCTION(_date);
  87. }
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement