VS编辑器扩展中的并行性

时间:2013-08-26 14:56:25

标签: visual-studio-2012

我有一个Visual Studio扩展,用于文本编辑器,使用MEF-大括号突出显示,语法高亮,大纲,等等。

Visual Studio是否会在每个文件的多个线程上运行我的标记器,或者仅序列化?

1 个答案:

答案 0 :(得分:2)

Visual Studio编辑器只会在ITextBuffer / ITextView所关联的主题上运行序列化的标记器。由于Visual Studio仅在主线程上创建有趣的ITextView / ITextBuffer实例,因此这里没有太多的线程问题。

我小心地说上面有有趣的,因为在某个时间点,调试器确实在后台线程上创建了一些ITextBuffer个实例。但是他们使用了自定义内容类型,因此扩展通常不受限制。

请注意ITagger<T> API可用于任何扩展程序。从技术上讲,另一个扩展可以通过几种方式创建线程问题

  1. 请求在其他线程上创建标记器。我知道没有延伸这样做,这将被视为不好的做法。
  2. 在后台线程上创建ITextView,这将导致您的ITagger<T>实现也在那里创建。