努力使用 return 方法与 PuppeteerSharp .Dispose()

Struggling to .Dispose() using return method with PuppeteerSharp

我正在努力 .Dispose() 并且 Chromium 正在构建并导致我的计算机崩溃,因为这是一个持续了好几天的过程。

但是,我不能将 .Dispose() 放在 return 之后,因为它将无法访问,如果我将它放在 return 之前,内容字符串将变得陈旧。

    var docBContent = await renderHtmlAsync(url2);
    fromDoc.LoadHtml(docBContent);

public static async Task<string> renderHtmlAsync(string url2)
{
    await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultChromiumRevision);
    Browser browser = await Puppeteer.LaunchAsync(new LaunchOptions
    {
        Headless = true
    });
    var page = await browser.NewPageAsync();
    page.DefaultTimeout = 0;
    var navigation = new NavigationOptions
    {
        Timeout = 0,
        WaitUntil = new[] {
                WaitUntilNavigation.DOMContentLoaded }
    };
    await page.GoToAsync(url2, navigation);
    var content = page.GetContentAsync();

    return await content;
}

这是出现的内容,包括到目前为止提到的解决方案:

我该如何解决这个问题?

您可以为此使用 using 块:

public static async Task<string> renderHtmlAsync(string url2)
{
    await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultChromiumRevision);
    using (Browser browser = await Puppeteer.LaunchAsync(new LaunchOptions
    {
        Headless = true
    }))
    {
        var page = await browser.NewPageAsync();
        page.DefaultTimeout = 0;
        var navigation = new NavigationOptions
        {
            Timeout = 0,
            WaitUntil = new[] {
                    WaitUntilNavigation.DOMContentLoaded }
        };
        await page.GoToAsync(url2, navigation);
        var content = page.GetContentAsync();

        return await content;
    }
}

这就像:

var myObject = new DispoableObject();
try
{
    // insert code
    return result;
}
finally
{
    myObject.Dispose();
}

finally 中的代码总是被执行,即使在 try 块中抛出异常。