Witam,
Moja sytuacja wygląda następująco. Mam klasę ze zmiennymi string, powiedzmy
public class Zamowienie
{
public string numerZamowienia;
public string czas;
public string rodzaj;
public string ilosc;
...
//konstruktor
public Zamowienie(string klucz)
{
this.numerZamowienia=klucz;
}
}
Obiekty tej klasy tworzę i zapamiętuję w kolekcji Dictionary. Kluczem jest numerZamowienia, a wartością Zamowienie.
Mój program ciągle, w osobnym wątku, "pracuje" z tymi obiektami.
I tu pojawia się moje pytanie. Co się stanie jeżeli w trakcie aktualizacji danych w obiekcie zechce pobrać wszystkie wartości pól tego obiektu?
Czyli coś takiego:
- przywołaj obiekt klasy Zamówienie z numerZamowienia=6
- aktualizuj pole czas
<--- w tym momencie mój drugi wątek zapytał o ten sam obiekt, ale odczytuje wartości z numeruZamówienia=6, czyli czas (już zmieniony)
Zapisywanie nowych wartości stoi w miejscu, myśli co by tu wpisać w pozostałe pola, a wątek odczytujący czyta dalej - string rodzaj, string ilość. - Dopiero teraz metoda aktualizująca wartości pól obiektu aktualizuje pozostałe pola.
W wyniku czego wątek odczytujący zwraca nam dla numeru zamówienia 6:
nowy czas
poprzedni rodzaj
poprzednią ilość
Czy takie "pomieszanie" wartości pól obiektu (aktualne, poprzednie) jest możliwe? A może dzieje się tak, że wykrywany jest dostęp do obiektu, a wtedy odczytywanie wartości pól z tego obiektu wykonywane jest na kopi poprzedniego stanu?
Jeżeli opcja 1 w moim przypadku jest możliwa, to jak tego uniknąć?
Dzięki za pomoc.