почему C # продолжается с исключением исключения? - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь обрабатывать исключения задач без ожидания. Я пытаюсь использовать ContinueWith с TaskContinuationOptions.NotOnRanToCompletion. Но у меня есть одна главная проблема - в тестовой программе все идет хорошо и работает только код из ContinueWith. Но в моей основной программе Exception по-прежнему переходит к перехвату блоков и к ContinueWith (функция не перестает работать, но я хочу работать с этими исключениями другим способом).

Маленький пример выглядит так

class Program
{
    static void Main(string[] args)
    {
        try
        {
            Testim();
        }
        catch (Exception)
        {
            Console.WriteLine("catch");
        }

    }

    static void method()
    {
        HttpClient cl=new HttpClient();
        cl.PostAsync("http://oru.uri", null);
    }

    static void Testim()
    {
        HttpClient cl = new HttpClient();
        Task t = cl.PostAsync("http://oru.uri", null);
        t.ContinueWith((Task t1) => { Console.WriteLine("success"); }, CancellationToken.None,
            TaskContinuationOptions.OnlyOnRanToCompletion, TaskScheduler.Current);
        t.ContinueWith((Task t1) => { Console.WriteLine("error"); }, CancellationToken.None,
            TaskContinuationOptions.OnlyOnFaulted, TaskScheduler.Current);
        Console.ReadKey();
    }
}

В тестовом проекте все в порядке, но в моем другом проекте исключения обрабатываются 2 раза - в catch, и в continue, и catch выполняются первыми.

1 Ответ

0 голосов
/ 06 ноября 2018

Проблема моего кода (не этого примера) заключалась в том, что я жду (). Но когда я получаю исключение перед Wait (), тогда Wait генерирует Exception

...