public void Clear() { sr = null; filename = null; task = null; patch = null; }
public static IEnumerator ParseAsync <T>(StreamReader sr, string filename, ParseTask task, PatchDataLoadedCallback <T> callback) where T : PatchData { if (parseThread == null) { taskData = new ParseTaskData(); parseThread = new Thread(ParseThread) { Name = "ParseThread", Priority = ThreadPriority.Highest, }; parseThread.Start(); } lock (_lock) { taskData.sr = sr; taskData.filename = filename; taskData.task = task; blockParser = false; Monitor.Pulse(_lock); } while (!blockParser) { yield return(IEnumeratorExtensions.AvoidRunThru); } callback(taskData.patch as T); // Clear task data taskData.Clear(); }
public ParseTask ContinueAfter(ParseTask currentTask) { // Set our previous task Volatile.Write(ref _previous, currentTask?.Task); return(this); }
public string StartNewTask(string rootFolderpath, DateTime targetDate) { var task = new ParseTask(rootFolderpath); ParseTasks.Add(task.Id, task); task.Start(targetDate); return(task.Id); }
public Task <IAnalysisCookie> Enqueue(IDocument doc, PythonLanguageVersion languageVersion) { if (doc == null) { throw new ArgumentNullException(nameof(doc)); } var task = new ParseTask(this, doc, languageVersion); try { return(_parsing.AddOrUpdate(doc.DocumentUri, task, (d, prev) => task.ContinueAfter(prev)).Start()); } finally { task.DisposeIfNotStarted(); } }