我有一个需要登录系统:
处理这种情况的好方法是知道网络堆栈是事件驱动的,这意味着当我接收数据时,当我连接时发送事件等等。
我想知道我是应该使用Async方法还是只使用简单的循环?
答案 0 :(得分:1)
异步或非主要取决于您向用户提供的GUI类型。如果您在控制台应用程序中实现此功能,则无需为此操作,因为控制台始终只执行一项操作。另一方面,如果您要为用户提供功能齐全的GUI,那么在应用程序尝试连接时,GUI响应非常重要。
除此之外,当您通过套接字处理网络和通信时,最好使用数据包标头。即你应首先发送一个数据包标题,说明你要发送登录请求的服务器,这样的标题应该主要包含两个信息1.后面将包含哪种数据包,以及2.后续数据包的长度是多少。同样,服务器将首先使用数据包标头进行响应。
异步是一个好主意,您应该尝试使用网络实现异步方法,以优雅地处理用户交互并使GUI更具响应性。
答案 1 :(得分:1)
如果您使用的是WPF 4.5,则新的async / await构造将非常适合您的场景。
http://msdn.microsoft.com/en-gb/library/vstudio/hh191443.aspx
答案 2 :(得分:0)
可以通过在synchronous methods
主题上调用background
来保持GUI响应能力。
如果您打算让用户有机会'Cancel'
其请求[如果服务器响应太慢],则异步调用非常有用
同步:
|----A-----| |-----B-----------| |-------C------|
异步:
|----A-----|
|-----B-----------|
|-------C------|
考虑到你需要在进入下一步之前完成一个步骤,我认为异步方法不会给你任何显着的优势(除了取消请求的能力)。
答案 3 :(得分:0)
允许您循环执行异步任务