Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static class ApiManager
- {
- static Queue<ApiTask> apiTasks = new Queue<ApiTask>();
- static Thread thread;
- static AutoResetEvent wakeUp;
- public static void Init() // <--1
- {
- wakeUp = new AutoResetEvent(false);
- thread = new Thread(runner);
- thread.Start();
- }
- public static void AddTask(ApiTask task) //<--5
- {
- apiTasks.Enqueue(task);
- wakeUp.Set();
- }
- static void runner()
- {
- wakeUp.Reset();
- while (true) //<--2
- {
- wakeUp.WaitOne(); //<--3
- while (apiTasks.Count > 0)
- {
- var task = apiTasks.Dequeue(); //<--4
- task.Start();
- }
- wakeUp.Reset();
- }
- }
- }
- public abstract class ApiTask
- {
- protected abstract void DoJob(); //<-- 1
- protected AutoResetEvent IsDone = new AutoResetEvent(false);
- protected Exception RegisteredException = null;
- internal void Run()
- {
- }
- public void Start()
- {
- try
- {
- DoJob();
- }
- catch (Exception ex)
- {
- this.RegisteredException = ex;
- }
- IsDone.Set();
- }
- }
- public abstract class ApiTask<TResult> : ApiTask where TResult : new()
- {
- protected TResult Result = new TResult();
- public TResult GetResult()
- {
- ApiManager.AddTask(this);
- this.IsDone.WaitOne();
- if (RegisteredException != null) throw RegisteredException;
- return Result;
- }
- }
- public abstract class CreateDocumentTask:ApiTask<APIDocument>
- {
- DateTime _date;
- protected int CreateDocumentTask(DateTime date)
- {
- _date = date;
- }
- protected override void DoJob()
- {
- Result = APICREATEDOCUMENTFUNCTION(_date);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement