按顺序处理登录事件的好方法

时间:2013-04-23 12:06:37

标签: c# wpf asynchronous async-await

我有一个需要登录系统:

  1. 连接
  2. 等到它连接完毕。
  3. 发送登录请求。
  4. 等待此请求的回复。
  5. 发送另一种请求。
  6. 等待此请求
  7. 继续!
  8. 处理这种情况的好方法是知道网络堆栈是事件驱动的,这意味着当我接收数据时,当我连接时发送事件等等。

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

4 个答案:

答案 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)

协同程序是一个很好的技巧

允许您循环执行异步任务

Coroutines in C#