Интересно, что произойдет, если я вызову метод, который помечен как async, не используя ожидание. Рассмотрим следующий пример:Что происходит при вызове метода async без ожидания?
private int id = 0;
async Task Initialize()
{
var content = await LoadFromDisk(id);
await Process(content);
return;
}
DataId
{
get { return id; }
set { id = value; Initialize(); }
}
Я знаю, что это произведет предупреждение компиляции, но мой вопрос, если ожидаемый метод вызывает в Initialize() будет продолжать работать, как и следовало ожидать. Как вы можете видеть, нет необходимости, чтобы сеттер ожидал Initialize(), поскольку нет возвращаемого значения, и это последний вызов средства настройки свойства. Это своего рода огонь и забыть.
Причина, по которой я хотел бы сделать это, заключается в том, что я хотел бы объединить MVVM и базу данных, которая заставляет меня использовать методы async.
В приведенном выше примере пользователь выбирает запись из списка, и программа должна отображать подробную информацию о записи в другой части представления.
Я хотел бы привязать выбранную запись списка к DataId, которая обновляет подробное представление всякий раз, когда пользователь меняет выбор. Конечно, можно было бы сделать вызовы метода async из обработчика событий, но я хотел бы избежать обработчиков событий для более чистой реализации MVVM (используя в основном привязку данных).
Я смущен, вы говорите о методах async без 'await', но ваш' Initialize() 'не' async', но содержит 'await', который не будет компилироваться. – svick
Извините, просто забыли ключевое слово async. Я исправил это в сообщении. – SebastianR