在一段时间后调用方法而不阻塞

时间:2015-10-25 16:10:08

标签: c# multithreading asynchronous

我正在制作一个网络服务器应用程序,我有一个等待连接的Listener类,并生成一个HTTPConnection,并在每次创建时传递新的Socket连接请求已成立。 HTTPConnection类异步等待数据(使用Socket.BeginReceive)。

我需要延迟执行超时。如果客户端在一段时间后未能发送完整的HTTP请求,我想关闭连接。构建HTTPConnection对象后,等待期应该开始,如果客户端无法发送请求,则调用Timeout函数。显然,我不能暂停构造函数方法几秒钟,因此等待需要发生异步。我还需要能够取消任务。

我可以做new Thread(...)和所有,但那是非常糟糕的设计。有没有其他方法来安排稍后调用的方法?

1 个答案:

答案 0 :(得分:1)

如果存在必须执行的超时事件,您可以将所有推迟的事件附加到某些有序数据结构,并在某个时间间隔检查后台任务。

您也可以将这些事件保存在数据库中(如果您有很多客户端,我认为它可能会导致高内存使用率)。

此外,后台任务可以从数据库中获取所有过期事件并立即处理它们。