Witam,
Czy ktoś może mnie naprowadzić co robię tu źle? Chodzi o kolekcję _passengers(lista).
Pojawia się InvalidOperationException - najwyraźniej jeden wątek zmienia kolekcję, drugi próbuje z niej czytać. No ale właśnie - czy locki jakie wprowadziłem do kodu nie powinny temu zapobiec?
2 metody. Pierwsza:
internal void TakePassengers(List<Passenger> awaitingPassengers)
{
lock (_locker) // probowałem też _passengers oraz ICollection list=_passengers i lock(list.SyncRoot)
{
foreach (var passenger in awaitingPassengers)
{
if (CanBeTakenNow(passenger))
{
_passengers.Add(passenger);
CurrentOccupancy++;
awaitingPassengers.Remove(passenger);
}
}
}
}
Druga metoda:
public List<Passenger> LeavePassengers()
{
lock (_locker)
{
List<Passenger> left = new List<Passenger>();
foreach (var passenger in _passengers)
{
if (CanPassengerBeLeft(passenger))
{
left.Add(passenger);
_passengers.Remove(passenger);
}
}
return left;
}
}
Z góry dziękuję za wskazówki.