线程化(这些线程是退出还是中止?)

时间:2013-08-10 09:11:32

标签: c# .net multithreading delegates

我只是想对下面的程序进行澄清:

foreach (Match match in MC)
{   
    string link = match.Groups["link"].ToString();
    if (link.Contains("ebay.de/itm/"))
    {
        int endIndex = link.IndexOf("?pt");
        link = link.Substring(0, endIndex);
        if (link != lastLink)
        {
            getEanPerLink = delegate
            {
                getEan(link);
            };
            new Thread(getEanPerLink).Start();
        }
        lastLink = link;
    }
}

程序循环时会产生很多线程。我只想问这些线程是否结束或退出。或者如果没有,我如何中止每个创建的线程?

2 个答案:

答案 0 :(得分:3)

每个线程将在getEan方法退出时结束。如果确实如此,那么您不必再做任何其他事情,线程和Thread对象将彻底消失。

可以中止线程,但不推荐使用它,因为它会在线程正在执行的任何操作中抛出异常。建议的方法是与您希望它结束​​的线程进行通信,以便它可以在代码中方便的位置执行此操作。

答案 1 :(得分:1)

将它们作为后台线程,而不是在关闭或中止正在运行的线程时关闭它。

我的建议不要在此使用线程;这是一种使用线程的坏方法。

如果你使用.net 4.5使用async await
如果你使用.net 4使用任务
如果你使用.net 3.5使用ThreadPool
如果你使用.net 2 backgroundWorker

Greertings,
巴萨姆