提交 b13914a5 编写于 作者: C CyrusNajmabadi

Issue option change events using the same task queue system as the workspace uses.

上级 f049a579
......@@ -28,7 +28,7 @@ internal class OptionServiceFactory : IWorkspaceServiceFactory
public IWorkspaceService CreateService(HostWorkspaceServices workspaceServices)
{
return new OptionService(_optionProviders, _optionSerializers);
return new OptionService(workspaceServices, _optionProviders, _optionSerializers);
}
// Internal for testing purposes only.
......@@ -39,12 +39,18 @@ internal class OptionService : IOptionService
ImmutableDictionary.Create<string, ImmutableArray<Lazy<IOptionSerializer, OptionSerializerMetadata>>>();
private readonly object _gate = new object();
private readonly IWorkspaceTaskScheduler _taskQueue;
private ImmutableDictionary<OptionKey, object> _currentValues;
public OptionService(
HostWorkspaceServices workspaceServices,
IEnumerable<Lazy<IOptionProvider>> optionProviders,
IEnumerable<Lazy<IOptionSerializer, OptionSerializerMetadata>> optionSerializers)
{
var workspaceTaskSchedulerFactory = workspaceServices.GetRequiredService<IWorkspaceTaskSchedulerFactory>();
_taskQueue = workspaceTaskSchedulerFactory.CreateTaskQueue();
_options = new Lazy<HashSet<IOption>>(() =>
{
var options = new HashSet<IOption>();
......@@ -199,7 +205,15 @@ public void SetOptions(OptionSet optionSet)
}
}
// Outside of the lock, raise events
// Outside of the lock, raise the events on our task queue.
_taskQueue.ScheduleTask(() =>
{
RaiseEvents(changedOptions);
}, "OptionsService.SetOptions");
}
private void RaiseEvents(List<OptionChangedEventArgs> changedOptions)
{
var optionChanged = OptionChanged;
if (optionChanged != null)
{
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册