国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

多線程、多任務管理 簡單demo

2019-11-17 02:13:47
字體:
來源:轉載
供稿:網友
多線程、多任務管理 簡單demo

需求:假設多個任務需要執(zhí)行,每個任務不是一時半會能完成(需要能看到中間執(zhí)行狀況);

多個任務 根據條件不同 可能需要不同的處理

分析:多線程并發(fā)執(zhí)行多任務;

對任務進行管理,追蹤中間執(zhí)行狀態(tài);

運用策略模式抽象執(zhí)行類;

實現(xiàn):

 1 public enum TaskStatus 2     { 3         wait = 0, 4         working = 1, 5         stop = 2, 6         suspend = 3, 7         complete = 4, 8         fail = 5, 9         other = 9910     }
TaskStatus
  1 public class Task  2     {  3         public TaskDelegate<ParaStatus> taskStatus;  4         public TaskDelegate<ParaInfo> taskInfo;  5         public TaskDelegate<ParaPRocess> taskProcess;  6   7         private TaskStatus _status = TaskStatus.wait;  8         private IExecuter _Executer { get; set; }  9         private Guid _taskId; 10         private Thread thread; 11         private string _name; 12  13         public Task(Guid id, IExecuter Executer) 14         { 15             _taskId = id; 16             _Executer = Executer; 17             _Executer.TaskId = id; 18             _Executer.Task = this; 19         } 20  21         public void Wait() 22         { 23             ChangeStatus(TaskStatus.wait); 24         } 25  26         public string Name 27         { 28             get 29             { 30                 return _name; 31             } 32             set 33             { 34                 _name = value; 35             } 36         } 37          38         public Guid TaskId 39         { 40             get 41             { 42                 return _taskId; 43             } 44         } 45          46         public TaskStatus Status 47         { 48             get 49             { 50                 return _status; 51             } 52             set 53             { 54                 _status = value; 55             } 56         }         57  58         public void Start() 59         { 60             if (thread == null) 61             { 62                 thread = new Thread(_Executer.Do); 63             } 64             else if (thread.ThreadState == ThreadState.Stopped) 65             { 66                 thread = new Thread(_Executer.Do); 67             } 68             thread.Start(); 69             ChangeStatus(TaskStatus.working); 70         } 71         public void ChangeStatus(TaskStatus s) 72         { 73             Status = s; 74             ParaStatus ps = new ParaStatus(TaskId); 75             ps.Status = Status; 76             if (taskStatus != null) taskStatus(ps); 77         } 78         public void Stop() 79         { 80             if (thread != null) 81             { 82                 if (thread.IsAlive) 83                 { 84                     try 85                     { 86                         thread.Abort(); 87                     } 88                     catch { } 89                 } 90             } 91             ChangeStatus(TaskStatus.stop); 92         } 93         public void Suspend() 94         { 95             try 96             { 97                 thread.Suspend(); 98             } 99             catch { }100             ChangeStatus(TaskStatus.suspend);101         }102         public void Resume()103         {104             if (thread.IsAlive)105             {106                 thread.Resume();107             }108             ChangeStatus(TaskStatus.working);109         }110     }
Task
1  public interface IExecuter2     {3         Guid TaskId { get; set; }4 5         Task Task { get; set; }6         void Do();7     }
IExecuter
 1 public class Executer : IExecuter 2     { 3         public void Execute() 4         { 5  6         } 7         #region IExecute 8         public Guid TaskId { get; set; } 9 10         public Task Task { get; set; }11 12         public void Do()13         {14             for (int i = 1; i <= 100; i++)15             {16                 if (Task.taskProcess != null)17                 {18                     Thread.Sleep(1000);19                     ParaProcess pp = new ParaProcess(TaskId);20                     pp.Rate = (double)i / 100;21                     Task.taskProcess(pp); 22                 }23             }24             if (Task.taskStatus != null)25             {26                 Task.ChangeStatus(TaskStatus.complete);27             }28         }29         #endregion30     }
Executer
 1 public class TaskManager 2     { 3         public List<Task> Tasks = new List<Task>(); 4         /// <summary> 5         /// 添加任務 6         /// </summary> 7         public Task AddTask(Task task) 8         { 9             try10             {11                 Tasks.Add(task);12 13                 task.Wait();14             }15             catch (Exception e)16             {17 18             }19             return task;20         }21         public void StartTask(Task task)22         {23             task.Start();24         }25         /// <summary>26         /// 停止任務27         /// </summary>28         /// <param name="downloader"></param>29         public void StopTask(Task task)30         {31             task.Stop();32         }33 34         public void SuspendTask(Task task)35         {36             task.Suspend();37         }38 39         public void ResumeTask(Task task)40         {41             task.Resume();42         }43 44         /// <summary>45         /// 刪除任務(自動終止未停止的任務)46         /// </summary>47         /// <param name="downloader"></param>48         public void DeleteTask(Task task, bool deleteFile)49         {50             //先停止任務51             task.Stop();52 53             while (task.Status == TaskStatus.working)54             {55                 Thread.Sleep(50);56             }57 58             //從任務列表中刪除任務59             if (Tasks.Contains(task))60             {61                 Tasks.Remove(task);62             }63         }64 65     }
TaskManager
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 百色市| 婺源县| 峨边| 台东县| 双桥区| 海丰县| 大英县| 遵化市| 临沂市| 九龙坡区| 含山县| 东阳市| 肥乡县| 静乐县| 宜良县| 祁门县| 寻乌县| 建阳市| 永兴县| 大新县| 长汀县| 乌兰县| 韶关市| 青龙| 苍南县| 泉州市| 岚皋县| 肥乡县| 新巴尔虎右旗| 开平市| 富锦市| 阿拉善左旗| 五河县| 菏泽市| 同江市| 洪雅县| 博客| 河间市| 绥宁县| 通辽市| 利辛县|