检查线程是否存活

时间:2011-10-21 06:33:49

标签: c# multithreading service .net-4.0

对于一项任务,可能需要很长时间才能完成,我想要一种机制

  1. 开始任务
  2. 返回用户界面(其网页)
  3. 定期/随机检查任务是否完成
  4. 在用户希望时取消执行任务
  5. 在任务完成/失败时收到通知
  6. 有哪些可能的解决方案?

    1. 线程吗 启动一个线程,保存它的ManagedThreadId,(你可以通过它的id得到一个线程)

    2. 写一个windows 服务, 通过共享对象/文件/ db将请求发送到服务? 继续以相同的方式与对象进行交互(对象/文件/数据库等) 服务?

2 个答案:

答案 0 :(得分:1)

在Windows服务中托管WCF服务,该服务将通过添加/读取队列来执行后台任务,该队列可以使用MSMQ或在数据库中维护。

添加项目进行处理时;你应该得到一个任务ID。然后,您应该能够根据任务ID记录db中任务的完成/失败/取消状态。

您可以在WCF合同中使用以下方法

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

答案 1 :(得分:0)

您可以在单个过程中完成此操作 查看Task Paralell Library和/或TPL DataFlow

http://msdn.microsoft.com/en-us/library/dd460717.aspx http://go.microsoft.com/fwlink/?LinkId=205053