7

这是场景:在用户登录时,我启动了一个任务,该任务正在侦听 IMAP 空闲以获取邮件通知,并且它通过信号器(一种推送通知)与客户端建立实时连接。现在的问题是我如何取消这个任务?即用户取消推送通知或注销..

编辑:根据我的理解,例如,如果 5 个用户登录到该站点,则有 5 个任务正在运行?那么如何取消单个任务。

4

3 回答 3

1

每当您创建任务时,您都必须创建一个取消令牌并将其传递给它。由于每个用户都与一个任务相关联,因此您可以将任务和取消令牌存储在用户的会话中。

现在使用存储在用户会话中的取消令牌,您可以在他注销或按下取消按钮时轻松取消任务。

请参阅此帖子以取消任务。

于 2012-10-19T17:23:50.173 回答
1

必须修改异步工作者以支持取消

http://www.csharp-examples.net/cancel-asynchronous-method/

您还可以使用不太复杂的后台工作程序 http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.cancelasync.aspx

当您向已经开始工作的外部源(数据库、应用程序)发送取消时遇到的一个问题,如果它不支持取消,您可能必须等到它完成。

编辑:我从来没有用 MVC 做过这个,但是找到了一篇关于“使用取消令牌”的好文章,用于在 MVC4 中采用 CancellationToken 参数的异步进程。 http://www.asp.net/mvc/tutorials/mvc-4/using-asynchronous-methods-in-aspnet-mvc-4 希望对您有所帮助。

于 2012-09-07T22:00:44.697 回答
0

该进程可以在用户没有任何活动的情况下杀死自己。在另一个线程中交换变量的最简单方法 - 文件。假设客户端浏览器仍然打开,javascript 计时器调用 Ajax 请求,它在服务器上将时间戳写入文件。您的任务还会定期读取文件,当时间戳太旧时,该进程会杀死自己。您可以选择设置的活动超时值。

于 2012-11-18T15:03:31.120 回答