/// <summary> /// Kill will send a signal to stop all IThreader objects under the name IThreader.Name. /// </summary> /// <param name="threader">The IThreader object being maintained by Threader</param> public void Kill(IThreader threader) { if (Tokens.ContainsKey(threader.Name)) { Tokens[threader.Name].Cancel(); } }
/// <summary> /// Killed will return the stopped/running state of a IThreader object. /// </summary> /// <param name="threader">The IThreader object being maintained by Threader</param> /// <returns></returns> public bool Killed(IThreader threader) { if (!Tokens.ContainsKey(threader.Name)) { try { return(Tokens[threader.Name].IsCancellationRequested); } catch { return(true); } } return(false); }
/// <summary> /// Spawn a new thread running the Action supplied by the IThreader. /// Multiple IThreaders under the same name can run together, although they will be killed together unless given unique names. /// </summary> /// <param name="threader"> The IThreader object to be maintained by Threader </param> public void Spawn(IThreader threader) { if (!Tasks.ContainsKey(threader.Name)) { Tasks[threader.Name] = new List <Task>(); Tokens[threader.Name] = new CancellationTokenSource(); } Task T = new Task(threader.Action, Tokens[threader.Name].Token, TaskCreationOptions.LongRunning); Tasks[threader.Name].Add(T); T.Start(); }