Пример #1
0
 public void Clear()
 {
     sr       = null;
     filename = null;
     task     = null;
     patch    = null;
 }
Пример #2
0
    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();
    }
Пример #3
0
            public ParseTask ContinueAfter(ParseTask currentTask)
            {
                // Set our previous task
                Volatile.Write(ref _previous, currentTask?.Task);

                return(this);
            }
Пример #4
0
        public string StartNewTask(string rootFolderpath, DateTime targetDate)
        {
            var task = new ParseTask(rootFolderpath);

            ParseTasks.Add(task.Id, task);
            task.Start(targetDate);
            return(task.Id);
        }
Пример #5
0
        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();
            }
        }