Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#windows server 2016上的TPL ActionBlock行为与windows 10 home上的不同_C#_Task Parallel Library - Fatal编程技术网

C#windows server 2016上的TPL ActionBlock行为与windows 10 home上的不同

C#windows server 2016上的TPL ActionBlock行为与windows 10 home上的不同,c#,task-parallel-library,C#,Task Parallel Library,我正在使用TPL ActionBlock作为我正在开发的网络爬虫 它在我的开发PC(即windows 10 home)上运行良好,但在我的windows Server数据中心2016上,如果在我调用时引发异常,则运行正常 actionBlock.Completion.Wait(); 信息是 One or more errors occurred. 内部的例外是 System.Threading.Tasks.TaskCanceledException: A task was canceled.

我正在使用TPL ActionBlock作为我正在开发的网络爬虫

它在我的开发PC(即windows 10 home)上运行良好,但在我的windows Server数据中心2016上,如果在我调用时引发异常,则运行正常

actionBlock.Completion.Wait();
信息是

One or more errors occurred.
内部的例外是

System.Threading.Tasks.TaskCanceledException: A task was canceled.
令人恼火的是,即使在调试模式下在服务器上运行VisualStudio,我也无法找出异常中的错误是在哪里创建的

下面是我如何使用ActionBlock的

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/catch
放在一个空的
try/catch
中,它真的是空的吗?我希望您的服务器超时,可能有一些策略阻止您访问某些网页?作为一种最佳实践,应该等待操作块完成,而不要使用Wait()方法。谢谢,为什么try/catch覆盖了操作块中的所有代码而没有捕获这些错误?
actionBlock.Completion.Wait();