簡體   English   中英

WebException未在try / catch中捕獲

[英]WebException not caught in try/catch

我看到了幾個有類似問題的帖子,但是沒有解決方案:/

我通過使用控制台應用程序調試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或其他任何內容。

提前致謝

編輯:-----------

我按要求減少代碼,因為刪除的代碼不是真正的問題

您應該在task中捕獲該異常。 添加另一種方法,並創建類似於以下內容的任務:

task.Add(Task.Factory.StartNew(() =>  Process(tp)));

void Process(TaskPlanner tp)
{
    try
    {
        tp.ExecuteBot.Execute();
    }
    catch (WebException wex)
    {
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM