Dispose
зависит от выхода WaitHandle
. Таким образом, хотя using
вызывает Dispose
, он не будет вдаваться в силу до тех пор, пока не будут выполнены условия стабильного состояния. Когда вы вызываете ReleaseMutex
, вы сообщаете системе, что вы освобождаете ресурс, и, таким образом, он может свободно распоряжаться им.
Похоже, ваш list3
- это просто временный список для хранения предметов из list2
. Просто используйте это:
var list3 = list2.Where(x => !list1.Any(y => x.MyProperty == y.MyProperty));
И затем добавьте их в list1
:
list1.AddRange(list3);
Однако вы можете напрямую обновить list1
с помощью простого цикла.
foreach(var e in list2)
{
if(!list1.Any(x => x.MyProperty == e.MyProperty))
list1.Add(e);
}
Вы также можете использовать Except
, чтобы выполнить проверку на равенство ваших предметов. Таким образом, вы должны предоставить IEqualityComparer
:
var list3 = list2.Except(list1, new MyComparer());
class MyComparer : IEqualityComparer<MyElementType>
{
public bool Equals(MyElementType x, MyElementType y)
{
return x.MyProperty == y.MyProperty;
}
public int GetHashCode(MyElementType e)
{
return e.MyProperty.GetHashCode();
}
}