一种在子线程被杀死或中断时通知父线程的方法

时间:2013-11-16 10:05:38

标签: c# multithreading

我在C#中有一个多线程应用程序。子线程做了一些认真的工作,我想知道当子线程被杀死时重新运行它。这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:4)

您最好使用.NET 4中引入的任务并行库。这样您就可以添加继续执行失败(或取消或成功)。致电Task.ContinueWith并传递续集。

从.NET 4开始,任务通常是首选的并发方法。它们构成良好,它们可以表示返回值的操作,它们可以表示异步操作,它们是C#5中async / await的基础...他们一般都很好:)

答案 1 :(得分:1)

可能有一种方法可以将父线程的函数传递给子线程中正在执行的函数,并将其附加到子线程中的委托。然后在子线程执行函数中,您应该应用try-catch机制并在catch块中调用该委托。

例如,像这样创建类:

public class Executor
{
    delegate void RunWhenFaild();

    void Execute(Action functionToBeExecuted, Action<Exception> callOnFailure)
    {
        RunWhenFaild += callOnFailure;

        try
        {
            functionToBeExecuted();
            RunWhenFaild -= callOnFailure;
        }
        catch (Exception e)
        {
            callOnFailure(e);
        }
    }
}

然后在您的代码创建函数中将在失败时调用:

void OnFailure(Exception e)
    {
        //DO SMTH WITH IT
    }

运行它:

TaskFactory.StartNewTask(() => new Executor().Execute(workToDo, OnFailure));

这样,您的函数OnFailure将从新任务内部调用。

如果不是,您仍然可以在父线程中创建循环并定期检查所有子线程的状态。但这当然不推荐。