首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MarkDown中的KeyNotFoundException

MarkDown中的KeyNotFoundException
EN

Stack Overflow用户
提问于 2016-03-31 20:21:31
回答 1查看 74关注 0票数 0

我有以下用于MarkDown的包装器辅助类。

代码语言:javascript
复制
public static class MarkdownHelper
{
    static Markdown _MarkdownTransformer;

    static MarkdownHelper()
    {
        _MarkdownTransformer = new Markdown( new MarkdownOptions { AutoNewLines = true, AutoHyperlink = true, StrictBoldItalic = true } );
    }

    public static IHtmlString Markdown(this HtmlHelper helper, string text)
    {
        string html = _MarkdownTransformer.Transform(text);

        return new MvcHtmlString(html);
    }
}

这似乎只能在第一次命中时生成(几次)异常:

System.Collections.Generic.KeyNotFoundException:给定的键在字典中不存在。

代码语言:javascript
复制
at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
at MarkdownSharp.Markdown.FormParagraphs(String text)
at MarkdownSharp.Markdown.RunBlockGamut(String text)
at MarkdownSharp.Markdown.Transform(String text)
at AppExtensions.MarkdownHelper.Markdown(HtmlHelper helper, String text)
[...]

在我看来,这似乎是一个并发问题。我使用的是最新稳定版本的MarkDownSharp。

我需要为包装器类使用不同的模式吗?

EN

回答 1

Stack Overflow用户

发布于 2016-10-02 01:33:01

最有可能的问题是,您在不同的线程中使用单个转换器。当一个线程开始转换时,另一个线程清除转换器状态并抛出异常。我也是这样做的..哇哦。

解决这个问题的一种方法是将转换器标记为"thread static“,并在属性中对其进行初始化(因为初始化线程静态只能内联一次)。如下所示,只要确保直接使用属性而不是静态变量即可。

代码语言:javascript
复制
[ThreadStatic] private static Markdown _markdownTransformer;

    private static Markdown Transformer
    {
        get
        {
            if (_markdownTransformer == null)
            {
                _markdownTransformer = new Markdown(new MarkdownOptions
                {
                    /*your options here*/
                });
            }

            return _markdownTransformer;
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36333364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档