WebException 未在 try/catch 中捕获
Posted
技术标签:
【中文标题】WebException 未在 try/catch 中捕获【英文标题】:WebException not caught in try/catch 【发布时间】:2013-09-05 14:35:06 【问题描述】:我看到几篇有类似问题但没有解决方案的帖子:/
我使用控制台应用程序调试 Windows 服务。它在网站上执行任务,并且必须能够收集 http 代码状态以创建日志。如您所见,敏感代码在 try/catch 中。
当我调试 (F5) 时,我有一个未捕获的 WebException。当我运行 (CTRL + F5) 时,异常消息会写入我的控制台并停止我的程序。 这是我的代码:
public partial class Schedulor : ServiceBase
void RunTasks()
schedulor.Start();
List<Task> task = new List<Task>();
foreach (TaskPlanner tp in listTp)
if (tp.CountDown == 0 && tp.IsRunning == false)
// Initialisation lors de GetTasks()
tp.IsRunning = true;
try
task.Add(Task.Factory.StartNew(() => tr = tp.ExecuteBot.Execute())); // WEBEXECPTION HERE (cannot find 404)
catch (Exception e)
if (e is WebException)
// treatment
Task.WaitAll(task.ToArray());
CreateLogs();
public class Bot : IBot
public TaskResult Execute()
TaskResult tr = new TaskResult();
int codeResponse, timeout;
string credentials;
try
WebRequest wrSettings = WebRequest.Create(settings.Url);
// treatment
catch (Exception e)
//Console.WriteLine(e.Message);
if (e is WebException)
var code = ((HttpWebResponse)((WebException)e).Response).StatusCode;
if ((int)code != settings.HttpResponse)
tr.MyResult = TaskResult.Result.nok;
goto next;
else tr.MyResult = TaskResult.Result.ok;
next:
return tr;
我不明白为什么我的捕获不起作用。我需要处理这些信息,因为该任务可以测试网站是否返回 404 或其他任何内容。
提前致谢
编辑:-----------
我按要求减少代码,因为删除的代码不是真正的问题
【问题讨论】:
【参考方案1】:您应该在任务中捕获该异常。添加另一个方法,并创建类似于以下内容的任务:
task.Add(Task.Factory.StartNew(() => Process(tp)));
void Process(TaskPlanner tp)
try
tp.ExecuteBot.Execute();
catch (WebException wex)
【讨论】:
以上是关于WebException 未在 try/catch 中捕获的主要内容,如果未能解决你的问题,请参考以下文章
System.Net.WebException HTTP 状态码
try/catch 和 MFC TRY/CATCH 有啥区别?