我在一个帖子中有一个长时间运行的任务。我
Thread a = new Thread(new ThreadStart()({ delegate()
{
Catalog.Generate(); //long running task
}));
a.Start();
Thread b = new Thread(new ThreadStart()({ delegate()
{
if( File.Exists(stopFile) )
{
a.Abort();
}
}));
b.Start();
这会在创建停止文件时停止线程A但是catalog.generate方法仍然在运行吗?我该如何结束?
答案 0 :(得分:1)
问题是你的线程b
开始工作并进行检查并立即退出。
你必须为线程b添加某种循环才能继续运行(这是示例代码不是最佳实践):
Thread b = new Thread(new ThreadStart()({ delegate()
{
int t=0;
while(i<100)
{
if( File.Exists(stopFile) )
{
a.Abort();
}
else
{
i++;
Thread.Sleep(500);
}
}
}));
答案 1 :(得分:0)
“在调用它的线程中引发ThreadAbortException,开始终止线程的过程。调用此方法通常会终止线程。”
abort方法发送一个线程应该关闭的指示符。它取决于线程处理如何处理它,以及何时响应。我建议Catalog.Generate可能拒绝回复。