为什么有时在ActionBlock中尝试/捕获不能捕获此错误?

J先生

我正在编写的网络爬虫中使用ActionBlock。

有时当我打电话

actionBlock.Completion.Wait();

我收到以下错误

发生一个或多个错误。

内在的例外是

System.Threading.Tasks.TaskCanceledException:任务被取消。

这是下面的完整代码块。

actionBlock = new ActionBlock<URLsToCheckObject>(URLToCheck =>
{
    try
    {
        // get more urls etc here and post below

        actionBlock.Post(new URLsToCheckObject { URLAddress = CleanURL, Host = host });
        if (actionBlock.InputCount == 0) actionBlock.Complete();
    }
    catch (Exception ex)
    {
        try
        {
            Logger.AddToDebugLog("Block 3 catch...", WebsiteToCrawl);
        }
        catch { }
    }

}, new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = 3, CancellationToken = cancellationSource.Token });

actionBlock.Post(new URLsToCheckObject { URLAddress = WebsiteToCrawl.website, Host = host });

try
{
    Logger.AddToDebugLog("Waiting on action block..", WebsiteToCrawl);
    actionBlock.Completion.Wait();
}
catch (Exception ex)
{
    try
    {
        Logger.AddToDebugLog("Block 4 catch..." + ex.Message, WebsiteToCrawl);
    }
    catch { }

    try
    {
        Logger.AddToDebugLog("Block 4 catch..." + ex.InnerException, WebsiteToCrawl);
    }
    catch { }

    try
    {
        Logger.AddToDebugLog("Block 4 catch...", WebsiteToCrawl);
    }
    catch { }
}

为什么包裹了内容的try / catchActionBlock不能捕获此异常?

马克西米利安·阿斯特(Maximilian Ast)

异常通常来自:

cancellationToken.ThrowIfCancellationRequested();

因为您没有CancellationToken在lambda内部使用内部,但是将其用作以下参数:

new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = 3, CancellationToken = cancellationSource.Token }

TaskCanceledException不是来自你的拉姆达(但可能从内部ExecutionDataflowBlockOptionsActionBlock),所以它是拉姆达里面你的try / catch的范围之内,所以也没有赶上。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Java

为什么在Java中尝试/捕获或同步需要语句块?

来自分类Dev

为什么有时不需要在Lambda中捕获const变量?

来自分类Dev

为什么不能在lambda中捕获此按引用('&this')?

来自分类Dev

为什么此Powershell函数有时返回列表,而有时返回XmlElement?

来自分类Dev

尝试捕获块中未捕获的错误

来自分类Dev

为什么我不能在变量中捕获FakeItEasy期望?

来自分类Dev

为什么“ except:”能够捕获此错误,但不能捕获“ Exception,e:”除外?

来自分类Dev

为什么有时不能在js中修改函数变量?

来自分类Dev

为什么未捕获此异常?

来自分类Dev

为什么名称捕获组不能捕获相同的值?

来自分类Dev

为什么有时未定义此变量?

来自分类Dev

为什么Catch没有捕获错误?

来自分类Dev

为什么我不能捕获OOM异常?

来自分类Dev

为什么我不能捕获从node-postgres抛出的错误?

来自分类Dev

为什么`catch`不能捕获这个异常?

来自分类Dev

为什么有时在PHP中无法使用此附加功能?

来自分类Dev

为什么在尝试捕获OOME时OOME会有不同的行为?

来自分类Dev

为什么数据成员不能在Lambda捕获列表中

来自分类Dev

使用try:捕获异常时,为什么不能返回?

来自分类Dev

尝试捕获Android中的错误

来自分类Dev

为什么带有捕获组的此正则表达式不能在bash中工作?

来自分类Dev

为什么此代码未在“错误”事件中捕获错误?

来自分类Dev

为什么“尝试/捕获”中的命令有时需要-ErrorAction停止,而有时则不需要?

来自分类Dev

为什么我不能正确捕获此异常?

来自分类Dev

为什么不能尝试捕获某些异常的工作?

来自分类Dev

为什么信号不能在 Perl 的模块中捕获

来自分类Dev

为什么我无法在 PHP 中捕获此错误(在布尔值上调用函数)?

来自分类Dev

为什么有时不捕获输入事件,在 C++ 中

来自分类Dev

为什么在 try 块中没有捕获 500 错误?

Related 相关文章

  1. 1

    为什么在Java中尝试/捕获或同步需要语句块?

  2. 2

    为什么有时不需要在Lambda中捕获const变量?

  3. 3

    为什么不能在lambda中捕获此按引用('&this')?

  4. 4

    为什么此Powershell函数有时返回列表,而有时返回XmlElement?

  5. 5

    尝试捕获块中未捕获的错误

  6. 6

    为什么我不能在变量中捕获FakeItEasy期望?

  7. 7

    为什么“ except:”能够捕获此错误,但不能捕获“ Exception,e:”除外?

  8. 8

    为什么有时不能在js中修改函数变量?

  9. 9

    为什么未捕获此异常?

  10. 10

    为什么名称捕获组不能捕获相同的值?

  11. 11

    为什么有时未定义此变量?

  12. 12

    为什么Catch没有捕获错误?

  13. 13

    为什么我不能捕获OOM异常?

  14. 14

    为什么我不能捕获从node-postgres抛出的错误?

  15. 15

    为什么`catch`不能捕获这个异常?

  16. 16

    为什么有时在PHP中无法使用此附加功能?

  17. 17

    为什么在尝试捕获OOME时OOME会有不同的行为?

  18. 18

    为什么数据成员不能在Lambda捕获列表中

  19. 19

    使用try:捕获异常时,为什么不能返回?

  20. 20

    尝试捕获Android中的错误

  21. 21

    为什么带有捕获组的此正则表达式不能在bash中工作?

  22. 22

    为什么此代码未在“错误”事件中捕获错误?

  23. 23

    为什么“尝试/捕获”中的命令有时需要-ErrorAction停止,而有时则不需要?

  24. 24

    为什么我不能正确捕获此异常?

  25. 25

    为什么不能尝试捕获某些异常的工作?

  26. 26

    为什么信号不能在 Perl 的模块中捕获

  27. 27

    为什么我无法在 PHP 中捕获此错误(在布尔值上调用函数)?

  28. 28

    为什么有时不捕获输入事件,在 C++ 中

  29. 29

    为什么在 try 块中没有捕获 500 错误?

热门标签

归档