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

本文关键字:方法 事件 顺序处理 登录 | 更新日期: 2023-09-27 18:10:34

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

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

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

我想知道我是否应该去异步方法或只有一个简单的循环?

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

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

除此之外,当您通过套接字处理网络和通信时,使用包头是一个好主意。也就是说,你应该先发送一个包头,告诉服务器你要发送登录请求,这样的头应该主要包含两个信息:1。接下来是什么样的数据包?以下数据包的长度是多少?同样的,服务器将首先响应包头。

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

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

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

可以通过在background线程上调用synchronous methods来保持GUI的响应性。

异步调用基本上是有用的,如果你计划给用户一个机会'Cancel'它的请求[如果服务器响应太慢]

同步:

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

异步:

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

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

协程是一个很好的技巧

允许你循环遍历异步任务

c#中的协程