2015-01-16 3 views
4

From here:async как метод result manager?

“async” ключевое слово позволяет «дождаться» ключевое слово в этом методе и изменения как результат метода обрабатываются. Это все ключевое слово async делает!

Вторая часть меня заинтересовала, но я не нашел объяснения этому в статье.

Делая небольшой тест (уведомление - не ожидали задача здесь):

static void X() 
    { 
     try 
     { 
      Y(); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
    } 

    static async void Y() //<---- notice here 
    { 
     throw new NotImplementedException(); 
    } 


    static void Main(string[] args) 
    { 
     X(); 

     Console.ReadLine(); 
    } 

Это прекратить программы:

enter image description here

Хотя извлекаяasync из этого:

static async void Y() 
    { 
     throw new NotImplementedException(); 
    } 

даст:

enter image description here

MSDN ничего не говорит об этом:

Если метод, что модифицирует асинхронное ключевое слово не содержит выражения ОЖИДАНИЯ или оператор, метод выполняется синхронно , А компилятор предупреждения предупреждает вас о любых методах асинхронных, которые не содержат Await, , потому что ситуация может указывать на ошибку

Вопрос

Если да, то еще делает слово async делает что мой код дает разные результаты?

+0

Я действительно хочу знать, почему это было downvoted :-), но я думаю, я никогда не знаю –

+0

Я не уверен, почему это было проголосовано. Хороший вопрос, на мой взгляд, –

+0

Более новая статья Стивена Клири http://msdn.microsoft.com/en-us/magazine/jj991977.aspx более подробно описывает исключения. –

ответ

7

async методы перехватывать все исключения, не бросайте их в стек вызывающую методе, и вместо того, чтобы включить их в Task возвращенном методе, пометив его как неисправную Task. Если метод равен async void, ошибка возникает на уровне приложения, как вы видели, поскольку нет возможности наблюдать за исключением через Task.

+0

Это появилось в очереди низкого качества. Я не мог понять, почему, но это оказался аудит. – jww

+0

Итак, [это] (https://i.imgur.com/0ytq8TW.jpg) неточно. (От [здесь] (http://blog.stephencleary.com/2012/02/async-and-await. HTML)). С помощью комбинации void она выдает исключение на уровне приложения. это не только позволяет ключевое слово ожидания –

+0

@RoyiNamir Нет, это не так.В этой цитате конкретно упоминается, что она изменяет способ обработки результатов метода, в этом случае, как распространяются исключения. – Servy

Смежные вопросы