2

假设我有ObjectA(of classA),其中包含:

List<classB> bList;

现在让我们假设在每个objectB线程中都有几个正在运行的线程(它们不能从外部访问objectB),threadB1并且threadB2.

现在,在某个objectB这样的列表中,threadB2发现objectBRemove==true.

发生这种情况时,我想终止此类对象的所有线程并将其从中删除bList(我实际上想销毁 this objectB)。

我想我可以在里面发起一个事件objectB并订阅一个objectA'​​s 方法到这样的事件:

public void onObjectBRemove(object sender, EventArgs e)
{
    bList.Remove((classB) sender);
}

当在objectB事件上升之后调用它时,它应该objectB从列表中删除。然后,垃圾收集器应该注意到objectB它变得未被引用并因此删除它,同时终止所有内部线程。

这应该工作吗?这是解决手头问题的合理方法吗?

4

1 回答 1

3

当在 objectB 的事件上升之后调用 this 时,应该从列表中删除 objectB。然后,垃圾收集器应该注意到 objectB 变为未引用并因此将其删除,同时终止所有内部线程。

这将从列表中删除对象 - 但List<T>不是线程安全的,因此您需要同步(或线程安全集合,例如ConcurrentBag<T>)。

请注意,这不会终止正在运行的线程。如果你想停止一个正在运行的操作,你应该使用.NET 的协作取消并将 a 设置CancellationTokenSource为它的取消状态,此时你的线程可以优雅地退出自己。

于 2013-08-27T21:36:15.627 回答