public SQLitePersistentStorage( string workingFolderPath, string solutionFilePath, string databaseFile, IDisposable dbOwnershipLock, IPersistentStorageFaultInjector?faultInjectorOpt) : base(workingFolderPath, solutionFilePath, databaseFile) { _dbOwnershipLock = dbOwnershipLock; _faultInjectorOpt = faultInjectorOpt; _solutionAccessor = new SolutionAccessor(this); _projectAccessor = new ProjectAccessor(this); _documentAccessor = new DocumentAccessor(this); _select_star_from_string_table = $@"select * from {StringInfoTableName}"; _insert_into_string_table_values_0 = $@"insert into {StringInfoTableName}(""{DataColumnName}"") values (?)"; _select_star_from_string_table_where_0_limit_one = $@"select * from {StringInfoTableName} where (""{DataColumnName}"" = ?) limit 1"; // Create a delay to batch up requests to flush. We'll won't flush more than every FlushAllDelayMS. _flushQueue = new AsyncBatchingDelay( TimeSpan.FromMilliseconds(FlushAllDelayMS), FlushInMemoryDataToDiskIfNotShutdownAsync, asyncListener: null, _shutdownTokenSource.Token); }
public OpenSourceGeneratedFile(SourceGeneratedFileManager fileManager, ITextBuffer textBuffer, Workspace workspace, ProjectId projectId, string generatorTypeName, string generatorAssemblyName, string generatedSourceHintName, IThreadingContext threadingContext) : base(threadingContext, assertIsForeground: true) { _fileManager = fileManager; _textBuffer = textBuffer; _workspace = workspace; _projectId = projectId; _generatorTypeName = generatorTypeName; _generatorAssemblyName = generatorAssemblyName; _generatedSourceHintName = generatedSourceHintName; // We'll create a read-only region for the file, but it'll be a dynamic region we can temporarily suspend // while we're doing edits. using (var readOnlyRegionEdit = _textBuffer.CreateReadOnlyRegionEdit()) { _readOnlyRegion = readOnlyRegionEdit.CreateDynamicReadOnlyRegion( _textBuffer.CurrentSnapshot.GetFullSpan(), SpanTrackingMode.EdgeInclusive, EdgeInsertionMode.Deny, callback: _ => !_updatingBuffer); readOnlyRegionEdit.Apply(); } _workspace.WorkspaceChanged += OnWorkspaceChanged; _batchingWorkQueue = new AsyncBatchingDelay( TimeSpan.FromSeconds(1), UpdateBufferContentsAsync, asyncListener: _fileManager._listener, _cancellationTokenSource.Token); }
public WorkspaceChangedEventSource( ITextBuffer subjectBuffer, IAsynchronousOperationListener asyncListener) : base(subjectBuffer) { // That will ensure that even if we get a flurry of workspace events that we // only process a tag change once. _asyncDelay = new AsyncBatchingDelay( TimeSpan.FromMilliseconds(250), processAsync: cancellationToken => { RaiseChanged(); return(Task.CompletedTask); }, asyncListener, CancellationToken.None); }