我对C#编程,GC的概念以及对IDisposable的理解还很陌生。就垃圾回收而言,调用Dispose是什么意思?
具体来说,我想知道以下代码是否偶尔会失败,具体取决于启动垃圾回收的时间。(在测试过程中,我无法使其崩溃)。

//List<TestClass2> tc2List;
//TestClass2 invokes a thread. It implements IDisposable.
//Its Dispose() sets a stop-condition for the thread,
//and joins the thread, awaiting it to stop. (may take 100 msek)

tc2List.RemoveAll(t =>
{
  if (String.Compare(t.Name, "Orange") == 0)
  {
    t.Dispose(); //May take up to 100 msek
    return true;
  }
  return false;
});

最佳答案

您的代码可以工作,但是风格很糟糕。谓词不应有副作用。因此,您应该首先处理元素,然后将其删除。

Predicate<T> filter = t => t.Name == "Orange";
foreach(var t in tc2List.Where(filter))
  t.Dispose();
tc2List.RemoveAll(filter);

关于c# - 在list.removeAll内调用处置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14519609/

10-09 05:00