首页 新闻 赞助 找找看

异步数据处理问题

0
[待解决问题]

现在想实现一个需求如下,

1:前端程序发起一个操作请求(如数据导出,或者请求外部api数据等),在服务端接收到处理请求后,发起一个后台执行操作(异步执行),返回给前端一个任务ID;

2:前端发出查询请求,根据任务ID查询当前任务处理进度和状态;

3:前端发出取消操作请求,根据任务ID取消当前处理任务;

求技术要点和技术解决方案,自己了解一点点异步编程,但不知怎么使用,求解.

nickel的主页 nickel | 菜鸟二级 | 园豆:338
提问于:2013-07-09 08:17
< >
分享
所有回答(2)
2

1、前端.juqery.ajax()操作并在success回调函数中记录taskId

2、后台实现一个队列用于响应前端的请求

3、后台有一个TaskId集合,用于标识任务

4、多线程操作可以在.NET4.0版本及以前用ThreadPool类,.NET4.5中使用Task类来操作

资料参考:那些年,我们一起追寻的异步编程[系列]

滴答的雨 | 园豆:3681 (老鸟四级) | 2013-07-09 09:08

谢谢,不过我有几个疑问还是不知道怎么处理,

如:1用APM的话,如何查询当前任务的处理状态,比如我们用一个一般处理程序来接(handler1)收客户端的任务发起请求,继承于IHttpAsyncHandler特征接口,不过从BeginProcessRequest,到EndProcessRequest,这个在clr内部处理时是异步的,但handler1从开始请求到输出请求会被锁定(这里其实是同步完成的),这不是我想要的结果;

我想要的就是客户端发起请求后,handler1接收到任务并记录任务到任务队列,并由后台处理,handler直接返回任务标示;

然后客户端接收到任务标志后,就可以发起任务进度查询的操作了;

支持(0) 反对(0) nickel | 园豆:338 (菜鸟二级) | 2013-07-10 10:22

@nickel: 不应该接着就调用EndProcessRequest。APM模式在Begin的时候可以指定回调函数,应该在此回调函数中调用EndProcessRequest。。。而若要实现进度查询,你必须在你的耗时任务的处理过程中做进度值标识,比如有一个int,运行到哪一步就改变不同的值,这样在做进度查询的时候才能正确标识现在任务到了哪一步

支持(0) 反对(0) 滴答的雨 | 园豆:3681 (老鸟四级) | 2013-07-10 12:08
0

呵呵,已解决,但有新的问题了

nickel | 园豆:338 (菜鸟二级) | 2013-08-07 08:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册