的任务,可能花费太长时间来完成,我想一个机制检查,如果一个线程是活着
- 启动任务
- 返回到用户界面(其网页)
- 定期/随机检查任务完成
- 取消正在执行的任务的时候用户希望这样
- 任务完成时得到通知/失败
什么是可能的解决方案?
主题? 启动一个线程,保存其ManagedThreadId,(你可以通过ID获得一个线程)
编写Windows 服务, 发送通过共享对象/文件/数据库来服务请求? 以同样的方式继续与服务交互(对象/文件/数据库等) 服务?
的任务,可能花费太长时间来完成,我想一个机制检查,如果一个线程是活着
什么是可能的解决方案?
主题? 启动一个线程,保存其ManagedThreadId,(你可以通过ID获得一个线程)
编写Windows 服务, 发送通过共享对象/文件/数据库来服务请求? 以同样的方式继续与服务交互(对象/文件/数据库等) 服务?
在Windows服务中托管WCF服务,该服务将通过从可以使用MSMQ或数据库维护的队列中添加/读取来执行后台任务。
当您添加一个项目进行处理;你应该得到一个任务ID。您应该能够根据任务ID在db中记录任务的完成/失败/取消状态。
您可以在合同
int ProcessItem(ItemDetails details); // returns task id
bool CancelTask(int taskID); // returns true if successfully cancelled; false otherwise
TaskStatus GetTaskStatus(int taskID); // returns Cancelled, Waiting, Failed or Completed
看起来像一个很好的通用解决方案,可以与请求/响应消息系统配对,共享RequestId。 – hazimdikenli
您的WCF下面的方法可以做到这一点在单个进程 看一看任务Paralell库和/或TPL数据流
http://msdn.microsoft.com/en-us/library/dd460717.aspx HTTP:/ /go.microsoft.com/fwlink/?LinkId=205053
您使用的是什么版本的.NET?听起来像.NET 4中的任务并行库将是理想的... –
@JonSkeet在ASP.NET网页上的TPL?你确定? –
@哈桑 - 啊,没有看到那一点。不在Web服务器本身,但很可能在服务*支持*用户界面。任务肯定还是相关的。 –