我有类似以下的课程,eventA
开火可能导致eventB
开火,这可能会导致eventC
开火:
class classA
{
public event EventHandler eventA;
}
class classB
{
public event EventHandler eventB;
public classB(classA passedInA)
{
passedInA.eventA += handleEventA;
}
void handleEventA(object sender, EventArgs e)
{
/* do some work */
if (somethingIsTrue)
{
EventHandler handler = eventB;
if (handler != null) { handler(this, args); }
}
}
}
class classC
{
public event EventHandler eventC;
public classC(classB passedInB)
{
passedInB.eventB += handleEventB;
}
void handleEventB(object sender, EventArgs e)
{
/* do some other work */
if (somethingElseIsTrue)
{
EventHandler handler = eventC;
if (handler != null) { handler(this, args); }
}
}
}
在我看来,像上面那样举起事件(因果关系)是非常合乎逻辑的;但是,有些东西感觉不对,因为如果我不小心,事件处理可能会永远持续下去。
在最糟糕的情况下,eventA处理程序设置为在自己的(新)线程中工作,这些线程永远不会消亡,或者需要很长时间才能消亡,并且线程池已经耗尽。
这是处理因果事件的正确方法吗?
答案 0 :(得分:0)