繁体   English   中英

无法捕获延迟初始化期间引发的异常(C# .NET)

[英]Can't catch exception thrown during lazy initialization (C# .NET)

我正在尝试通过 .NET 的 Lazy class 初始化昂贵的 object,这可能由于异常而失败。 惰性 class 的实例被缓存,因为在后续尝试初始化时可能会成功。 因此,我按如下方式创建实例:

Lazy<someObject> lazyValue =
    new Lazy<someObject>(() => { expensive initialization; }, 
        System.Threading.LazyThreadSafetyMode.PublicationOnly);

根据 .NET 的PublicationOnly文档,该异常不会被缓存,因此可以尝试重新初始化该值。 我遇到了无法捕获异常的问题。 现在编写我自己的懒惰 class 相当简单,但我想知道我是否错误地使用了 .NET 的懒惰 class 还是他们的错误?

以下(简化)代码将重现该问题:

private static void DoesntWork()
{
    int i = 0;

    Lazy<string> lazyValue = new Lazy<string>(() =>
    {
        if (i < 2)
        {
            throw new Exception("catch me " + i);
        }

        return "Initialized";
    }, System.Threading.LazyThreadSafetyMode.PublicationOnly);

    for (; i < 3; i++)
    {
        try
        {
            Console.WriteLine(lazyValue.Value);
        }
        catch (Exception exc) // I do not catch the exception!
        {
            Console.WriteLine(exc.Message);
        }
    }
}

好吧,看起来它应该可以工作。 如果您说它抛出异常但没有捕获它,那么......您是否在 Visual Studio 中运行,并在“调试”>“异常”菜单中检查了 ArgumentException 以告诉它总是在那里中断?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM