Async & Await

07/26/2016 13:24 Masterkroko1#1
Mahlzeit Com,

ich hätte da mal eine Frage bezüglich Async und Await.

Ich selbst "lerne" erst seit 3 Wochen C# und verstehe noch nicht genau wann ich was aufrufen muss.

Folgende Aufgabenstellung hab ich:
Ich muss ein Ordner überwachen in dem wird alle 5 sec. reingeschaut ob sich dort neue Dateien befinden. (ohne events!) Sollte dies der Fall sein möchte ich mit einer Schleife die Dateien selektieren verarbeiten und wegschieben.
Dies soll nebenbei laufen.

Mein erstes Ansatz ist:

Code:
        private bool runParser;
        private bool lookFileSystem;

        // constructor
        public DirectoryDeamon2()  {
            RunParser = false;
            lookFileSystem = true;
            LookFileSystem();
        }

        public static bool RunParser { get; set; }

        public async void LookFileSystem() {
            await Task.Run(async () => {
                var systemConfig = MainClass.systemConfig;
                while (lookFileSystem) {
                    // Time to wait in ms
                    Thread.Sleep(5000);

                    // Parser is running: continue
                    if (RunParser)
                        continue;

                    // Search mails
                    var listOfMail = Directory.GetFiles($"{ systemConfig.GetConfig("incomingMailDir") }");

                    // Found some mails
                    if (listOfMail.Count() > 0) {
                        RunParser = true;
                        // Parser
                        await FetchMails();
                    }
                }
            });
        }

       public async Task FetchMails() {
            Task.Run(() => {
                // Datei verarbeiten
                RunParser = false;
            });
        }
Wie schaff ich es nun das die Funktion "LookFileSystem" die Funktion "FetchMails" aufruft und darauf wartet das er fertig ist? Die beide Funktionen müssen auch im Hintergrund laufen damit der User weiterhin die Console verwenden kann.
Oder hat wer eine leicht verständliche Doku zu dem Thema?

Mfg Masterkroko
07/26/2016 17:10 Tasiro#2
LookFileSystem wartet schon auf FetchMails, dafür ist das await da.

Warum ist RunParser statisch, runParser aber nicht? Verwendest du letzteres überhaupt?

Wegen Thread.Sleep(5000) relevant: [Only registered and activated users can see links. Click Here To Register...]. Mit anderen Worten, so nicht Thread.Sleep verwenden, wenn es nicht zeitlich "verrutschen" darf.
07/28/2016 19:49 Xio.#3
ich mach mal den beginn mit dem ersten tipp:

statt Thread.Sleep machst du await Task.Delay

Edit:

Deinem code zufolge verstehst du async await noch ueberhaupt nicht bzw hast es komplett falsch gelernt.

schau dir das mal an

[Only registered and activated users can see links. Click Here To Register...]