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