提交 9c28f4ad 编写于 作者: S Sam Harwell

Cleanup from code review feedback

上级 ca15a205
......@@ -49,16 +49,10 @@ private sealed class SemanticChangeProcessor : IdleProcessor
Start();
// Register a clean-up task to ensure pending work items are flushed from the queue if they will
// never be processed.
AsyncProcessorTask.ContinueWith(
_ =>
{
foreach (var (documentId, data) in _pendingWork)
{
data.AsyncToken.Dispose();
}
_pendingWork.Clear();
},
_ => ClearQueueWorker(_workGate, _pendingWork, data => data.AsyncToken),
CancellationToken.None,
TaskContinuationOptions.ExecuteSynchronously,
TaskScheduler.Default);
......@@ -296,6 +290,19 @@ public void Enqueue(Document document, SyntaxPath changedMember)
}
}
private static void ClearQueueWorker<TKey, TValue>(NonReentrantLock gate, Dictionary<TKey, TValue> map, Func<TValue, IDisposable> disposerSelector)
{
using (gate.DisposableWait(CancellationToken.None))
{
foreach (var (_, data) in map)
{
disposerSelector?.Invoke(data)?.Dispose();
}
map.Clear();
}
}
private static IEnumerable<ProjectId> GetProjectsToAnalyze(Solution solution, ProjectId projectId)
{
var graph = solution.GetProjectDependencyGraph();
......@@ -354,16 +361,10 @@ private class ProjectProcessor : IdleProcessor
Start();
// Register a clean-up task to ensure pending work items are flushed from the queue if they will
// never be processed.
AsyncProcessorTask.ContinueWith(
_ =>
{
foreach (var (projectId, data) in _pendingWork)
{
data.AsyncToken.Dispose();
}
_pendingWork.Clear();
},
_ => ClearQueueWorker(_workGate, _pendingWork, data => data.AsyncToken),
CancellationToken.None,
TaskContinuationOptions.ExecuteSynchronously,
TaskScheduler.Default);
......
......@@ -10,8 +10,8 @@ namespace Microsoft.CodeAnalysis
[Export(typeof(PrimaryWorkspace)), Shared]
internal sealed class PrimaryWorkspace
{
private readonly ReaderWriterLockSlim s_registryGate = new ReaderWriterLockSlim(LockRecursionPolicy.NoRecursion);
private Workspace s_primaryWorkspace;
private readonly ReaderWriterLockSlim _registryGate = new ReaderWriterLockSlim(LockRecursionPolicy.NoRecursion);
private Workspace _primaryWorkspace;
[ImportingConstructor]
public PrimaryWorkspace()
......@@ -25,9 +25,9 @@ public Workspace Workspace
{
get
{
using (s_registryGate.DisposableRead())
using (_registryGate.DisposableRead())
{
return s_primaryWorkspace;
return _primaryWorkspace;
}
}
}
......@@ -42,9 +42,9 @@ public void Register(Workspace workspace)
throw new ArgumentNullException(nameof(workspace));
}
using (s_registryGate.DisposableWrite())
using (_registryGate.DisposableWrite())
{
s_primaryWorkspace = workspace;
_primaryWorkspace = workspace;
}
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册