您好,匿名用户

如何在发生异常时保存已完成的内容?

0 投票

一个经典的场景:
1、读取保存在 txt 文件中的 url
var urls = ReadAllLines(txt)
2、下载网页内容
var webs = await GetStringAsync(urls)
3、爬取图片
var imgs = ExtratImages(webs)
4、保存图片到本地
await SaveAsync(imgs)

步骤2 可能发生异常,当然其他方法也可能发生异常,所以我采取捕捉全局异常!我希望捕捉异常并弹出消息框提示,而且将以获取的内容继续执行。
例如:
1、读取了 txt 中的全部 url(共10条)
2、下载 url 内容(在下载第7条网页内容时发生异常)
3、弹出信息框

我的解决方案:

Task Main()
{
    var pages = new List<string>();
    try
    {
        // ...

        var urls = ReadAllLines(txt);
        (error, pages) = await GetAllPagesAsync(urls);
        // 之所以我返回 error,是因为如果在 GetAllPagesAsync 内部抛出异常的话,
        // 该方法无法返回已获取的网页内容返回给 pages,
        // 也就是说,如果发生异常,pages 是空的。
        // 已经获取到的内容将丢失。
        // 但这种方式好丑,有更好的解决方法吗?
        
        if(error != null)
        {
            throw error;
        }

        // ...
    }
    catch (Exception)
    {
        // Log error.
        // Show message box.
    }
    finally
    {
        var imgs = ExtratImages(pages);
        await SaveAsync(imgs);
    }
}

用户头像 提问 2019年 5月15日 @ Koz 下士 (956 威望)
分享到:

1个回答

0 投票
 
最佳答案

Pythoner

一般都边爬边保存吧,所以如果报错的话,之前爬的也保存过了。

捕获异常不代表程序结束啊,可以继续执行,然后把报错的URL保存下来重试。

如果是文本数据,可以爬的时候存在一个数组里,统一保存,不过这种方法并没有啥优势啊。

用户头像 回复 2019年 5月15日 @ Ahri 中士 (1,362 威望)
选中 2019年 5月12日 @Koz
提一个问题:

相关问题

0 投票
0 回复 193 阅读
用户头像 提问 2019年 5月29日 @ Cho'Gath 中士 (1,292 威望)
0 投票
0 回复 55 阅读
用户头像 提问 2017年 6月5日 @ Twisted Fate 中士 (1,154 威望)
0 投票
1 回复 164 阅读
用户头像 提问 2016年 6月23日 @ Fiddlesticks 中士 (1,107 威望)
0 投票
1 回复 60 阅读

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

IT技术交流群 - 随意问
欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...