0

我有一个登录系统,需要:

  1. 连接。
  2. 等到它连接上。
  3. 发送登录请求。
  4. 等待此请求的响应。
  5. 发送另一种请求。
  6. 等待这个请求
  7. 继续!

什么是处理这种情况的好方法,知道网络堆栈是事件驱动的,这基本上意味着当我接收数据时发送事件,当我连接时,等等。

我想知道我应该使用 Async 方法还是只使用一个简单的循环?

4

4 回答 4

1

异步与否很大程度上取决于您提供给用户的 GUI 类型。如果您在控制台应用程序中实现此功能,则无需这样做,因为控制台总是一次只做一件事。另一方面,如果您要为用户提供功能齐全的 GUI,那么当您的应用程序尝试连接时,GUI 必须具有响应性,这一点很重要。

除此之外,当您通过套接字处理网络和通信时,使用数据包头是一个好主意。即,您应该首先发送一个数据包头,说明您将要发送登录请求的服务器,并且该头应主要包含两个信息: 1. 将跟随什么样的数据包和 2. 跟随数据包的长度是多少。同样,服务器将首先响应数据包头。

异步是一个好主意,您应该尝试使用网络实现异步方法,以优雅地处理用户交互并使 GUI 更具响应性。

于 2013-04-23T12:11:35.763 回答
1

如果您使用的是 WPF 4.5,那么新的 async/await 结构将非常适合您的场景。

http://msdn.microsoft.com/en-gb/library/vstudio/hh191443.aspx

于 2013-04-23T12:23:41.963 回答
0

可以通过调用线程来保持 GUI 响应synchronous methods能力background

如果您计划让用户有机会接受'Cancel'其请求,异步调用基本上很有用[如果服务器响应太慢]

同步:

|----A-----| |-----B-----------| |-------C------|

异步:

|----A-----|
   |-----B-----------| 
       |-------C------|

考虑到您需要在进行下一步之前完成一个步骤,我认为异步方法不会给您带来任何显着优势(除了取消请求的能力)。

于 2013-04-23T12:32:46.843 回答
0

协程是一个不错的技巧

允许您循环执行异步任务

C#中的协程

于 2013-04-23T12:59:36.530 回答