O asynchroniczym zapisie...

0

Cześć.

Tak się zastanawiam...

Mam dość sporawą listę obiektów, każdy obiekt - są tego samego typu - podnosi event, aby logować jakąś treść do - być może tego samego - pliku.
No i jak by tu tego loggera bezpiecznie zaimplementować?

0

Użyć NLoga?

0

Póki co raczkuję i chciałbym to manualnie zaimplementować...

Aczkolwiek dzięki, dobrze wiedzieć, że profesjonalnie można użyć takiej libki.

Nie musi to być best way, najlepiej jakieś proste do zrozumienia rozwiązanie.

0

Zadanie chyba było łatwe, o ile testy dobrze zrobiłem... Zerkniecie czy może być?

public static class SafeLogger
    {
        private static readonly object locker = new object();

        public static void Log(string path, string message)
        {
            lock(locker)
            {
                using (var stream = new FileStream(path, FileMode.Append, FileAccess.Write))
                using (var writer = new StreamWriter(stream))
                    writer.WriteLine(message);
            }
        }
    }

Testy (są jakie są xD):

Task.Run(() =>
            {
                for (int i = 0; i < 5; i++) SafeLogger.Log(@"SCIEZKA", "" + i);
            });

            Task.Run(() =>
            {
                for (int i = 0; i < 5; i++) SafeLogger.Log(@"SCIEZKA", "" + i);
            });

            Console.ReadKey();

To tu nie chodziło o asynchroniczność, tylko o synchroniczość najwidoczniej : D
Poznałem konstrukcję lock dopiero teraz, także nie wypadłem na to.

0

@furious programming: Ach :)

Dla każdej ścieżki będę go instancjonował, ponieważ zauważyłem, że czeka bezsensu, jeśli zapisuje do innego pliku.
A tak to chyba jestem zadowolony póki co.

1 użytkowników online, w tym zalogowanych: 0, gości: 1