我正在尝试找到我的一个项目的最佳实践。这是一个典型的WPF应用程序,具有显示项目列表的UI,还有一个返回结果的数据服务。
我们异步调用服务以避免阻塞UI。我们面前有两个选择:
1. 使用Async await关键字 这需要从按钮单击到服务层(在客户端上进行http调用的类)以及之间任何方法都标记为Async。这种方法除了传播异步存在问题外,其他方面都可以正常工作。
2. 使用awaiter和回调 在这种方法中,UI客户端调用服务层并将回调传递给服务层,服务层将服务器上的http调用包装在任务中,并使用GetAwaiter().GetResult(),当http调用完成时,它会调用UI客户端传递的回调。在这种情况下,不必标记任何方法为async,但对于GetAwaiter()的使用还不确定。
Task.Run(async () => //等待http调用,调用回调).GetAwaiter().GetResult();
我只是想找出哪种方法更好,并且是否存在任何问题,我应该注意些什么。
我们异步调用服务以避免阻塞UI。我们面前有两个选择:
1. 使用Async await关键字 这需要从按钮单击到服务层(在客户端上进行http调用的类)以及之间任何方法都标记为Async。这种方法除了传播异步存在问题外,其他方面都可以正常工作。
2. 使用awaiter和回调 在这种方法中,UI客户端调用服务层并将回调传递给服务层,服务层将服务器上的http调用包装在任务中,并使用GetAwaiter().GetResult(),当http调用完成时,它会调用UI客户端传递的回调。在这种情况下,不必标记任何方法为async,但对于GetAwaiter()的使用还不确定。
Task.Run(async () => //等待http调用,调用回调).GetAwaiter().GetResult();
我只是想找出哪种方法更好,并且是否存在任何问题,我应该注意些什么。
AggregateException
,但是我不知道GetAwaiter
方法中发生的异常该怎么处理。 - Eris