我想找到我的项目之一的最佳实践。这是一个典型的带有UI的WPF应用程序,它显示项目列表,并且有一个返回结果的数据服务。异步等待vs GetAwaiter()。GetResult()和回调
我们正在异步调用该服务,以便不阻止用户界面。我们已经在我们面前的两个选项:
使用异步等待关键字 这需要标记所有的按钮的方法异步单击所有服务层的方式(在客户端类,使HTTP调用服务器)和其中的任何方法。这种方法能正常工作等,然后到处传播异步的问题
使用awaiter和回调 在这种方法中,UI客户端调用业务层和传送回调到服务层,服务层包装了HTTP调用服务器,并使用GetAwaiter()。GetResult(),当http调用完成时,调用UI客户端传递的回调函数。在这种情况下,没有方法必须标记为异步,但不确定使用GetAwaiter()。GetAwaiter()。GetResult() );
我只是试图找出这是一个更好的办法,如果有一些问题有两种方法,我应该知道的
我敢肯定,第二种方法偶尔会导致死锁。我知道,因为我在使用Windows Universal进行开发时遇到了类似的情况。 – Felype
也有例外的问题。我知道一个完整的异步实现,最后得到'AggregateException',但我不知道'GetAwaiter'方法中的异常会发生什么。 – Eris
@Eris当您等待时,您不会收到'AggregateException'。你会得到内在的异常。 'GetResult'也是一样。 – i3arnon