我可以创建一个private static readonly HtmlParser HtmlParser = new HtmlParser();
并在多个线程中安全地使用它吗?
或者我应该为每个线程或每个使用创建一个解析器以避免并发问题?
我可以创建一个private static readonly HtmlParser HtmlParser = new HtmlParser();
并在多个线程中安全地使用它吗?
或者我应该为每个线程或每个使用创建一个解析器以避免并发问题?
从源代码看起来它应该是线程安全的。该对象本身没有可变状态,并且每次使用默认选项创建一个新的 HtmlParser 似乎与创建一次相比没有任何好处,因此您应该能够将其视为单例。唯一的共享状态是它的配置,但默认构造函数使用默认配置,无论如何都是单例。
话虽如此,将其视为单例并没有太大的好处。它避免了分配并稍微减少了 GC,但由于它没有昂贵的构造函数,因此差异不会很大。