C#windows server 2016上的TPL ActionBlock行为与windows 10 home上的不同
我正在使用TPL ActionBlock作为我正在开发的网络爬虫 它在我的开发PC(即windows 10 home)上运行良好,但在我的windows Server数据中心2016上,如果在我调用时引发异常,则运行正常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.
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();