Сейчас await в C# упрощает работу с асинхронным кодом. Вы просто используете этот оператор с асинхронным методом и ждете потом, когда этот метод вернет значение. Но бывают случаи, когда асинхронный метод передает множество данных. Когда мы загружаем большой файл по сети, его данные поступают постепенно и хочется видеть этот процесс, а не финальный результат.
В 7-й версии C# это станет возможно. Можно будет писать что-то типа:
foreach await (var something in asyncData) { }
Этот же оператор можно будет использовать и с Disposable методами. Очень важно освобождать ресурсы, которые явно выделяются и это важно даже в .NET. Если класс открывает базу данных, то он дожен быть вовремя уничтожен и не держать открытым соединение, об этой проблеме я кажется писал уже на блоге и кажется описывал в книге по большим проектам.
Когда метод вызывается асинхронно, как убедиться, что он уничтожен по окончании работы даже в случае исключительной ситуации? Сейчас красивого метода нет, нужно обрабатывать исключения самому и уничтожать объект, а в 7-ке await можно будет использовать и с using:
using await (здесь создается асинхронный объект с реализацией IDisposable) { }
Вот это может быть реально круто.
Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку уже лайкнули 2 человек
В java делаешь try with resources и нет проблем при высвобождение в случае исключений.
И это работает с потоками?
2Михаил Фленов если поток выкинет исключение типа Interrapted exception то да.
try (final DbConnect connect = new DbConnect()) {
new Thread() {
connect.action();
.... throw new RuntimeException();
}
} catch (Exception) {
}
resource высвободится
"Await скоро СТНЕТ умнее" - опечатка детектед!
Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.