Я пытаюсь найти наилучшую практику для одного из моих проектов. Это типичное приложение WPF с пользовательским интерфейсом, который отображает список элементов, и есть служба данных, которая возвращает результат.
Мы вызываем службу асинхронно, чтобы не блокировать пользовательский интерфейс. У нас есть 2 варианта:
-
Использование ключевых слов Async для ожидания Это требует маркировки всех методов Async от кнопки до щелчка до уровня сервиса (класс на стороне клиента, который делает HTTP-вызов на сервере), и любой метод между ними. Этот подход работает отлично, а затем проблема распространения async везде
-
Использовать awaiter и callback В этом подходе клиент UI вызывает сервисный уровень и передает обратный вызов на уровень обслуживания, уровень сервиса обертывает вызов HTTP серверу в задаче и использует GetAwaiter(). GetResult(), когда HTTP-вызов завершен, он вызывает обратный вызов, передаваемый клиентом пользовательского интерфейса. В этом случае ни один метод не должен отмечать async, но не совсем уверен в использовании GetAwaiter()
Task.Run(async() = > //ждет HTTP-вызов, вызывает обратный вызов).GetAwaiter(). GetResult();
Я просто пытаюсь выяснить, какой из них лучше, и если есть какие-то проблемы с любым из них, я должен знать