internal void ProcessDataflowChanges(IProjectVersionedValue <DesignTimeInputSnapshot> value)
        {
            // Cancel any in-progress queue processing
            _compilationCancellationSource?.Cancel();

            DesignTimeInputSnapshot snapshot = value.Value;

            // add all of the changes to our queue
            _queue.Update(snapshot.ChangedInputs, snapshot.Inputs, snapshot.SharedInputs, snapshot.TempPEOutputPath);

            Assumes.Present(_project.Services.ProjectAsynchronousTasks);

            // Create a cancellation source so we can cancel the compilation if another message comes through
            _compilationCancellationSource = CancellationTokenSource.CreateLinkedTokenSource(_project.Services.ProjectAsynchronousTasks.UnloadCancellationToken);

            JoinableTask task = _scheduler.ScheduleAsyncTask(ProcessCompileQueueAsync, _compilationCancellationSource.Token);

            // For unit testing purposes, optionally block the thread until the task we scheduled is complete
            if (CompileSynchronously)
            {
                _threadingService.ExecuteSynchronously(() => task.Task);
            }
        }
            public Task ApplyAsync(DesignTimeInputSnapshot value)
            {
                var input = IProjectVersionedValueFactory.Create(value);

                return(base.ApplyAsync(input));
            }