Laden...

QuickIO: Untschiedliches Verhalten von QuickIO zwischen Debug-Modus und Release (exist. Zieldateien)

Erstellt von Quia_Respexit vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.226 Views
Q
Quia_Respexit Themenstarter:in
9 Beiträge seit 2018
vor 5 Jahren
QuickIO: Untschiedliches Verhalten von QuickIO zwischen Debug-Modus und Release (exist. Zieldateien)

Hallo zusammen,

ich verwende QuickIO. Hierbei stellte ich nun fest, das die QuickIO DLL als Release übersetzt sich anders verhält als im Debug-Modus übersetzt.

Ich verwende zur Zeit die Version 2.0.1

Das veränderte Verhalten kann während eines Kopiervorganges beobachtet werden, wenn bereits im Zielverzeichnis die zu kopierenden Dateien existieren.

Um ein einfrieren des Fensters zu vermeiden (WPF-Anwendung), setzte ich den Aufruf in ein

await Task.Run(() =>

. Bestehende Dateien im Zielverzeichnis sollen nicht überschrieben werden. Dafür ich gebe ich im Aufrufparameter overwrite false an. Als QuickIO-Debug übersetzt funktioniert es tadellos. Nach der verrichteten Arbeit findet sich das Programm ausserhalb von Task.Run. Binde ich aber die QuickIO DLL (als Release übersetzt) in mein Projekt ein, verbleibt der Vorgang innerhalb von Task.Run (des Aufrufes).

Hier ein Beispiel-Code:

 private static async Task NewMethod()
        {
            string source = @"H:\Data";
            string target = @"H:\_tmp";
            var cs
                    = new QuickIOTransferDirectoryCopyService(new QuickIODirectoryInfo(source)
                                                             , target
                                                             , 1
                                                             , 3
                                                             , System.IO.SearchOption.AllDirectories
                                                             , false);

            await Task.Run(() =>
            {
               // Aufruf bleibt in cs.Start() hängen
                cs.Start();
            });
        }

Rufe ich statt Task.Run den Vorgang mit await cs.StartAsync() auf, erfolgt das gleiche Verhalten.
Auf ein Zweitsystem verhält sich QuickIO genauso. Kann leider den Fehler im Quellcode von QuickIO nicht finden.

Gruß

16.806 Beiträge seit 2008
vor 5 Jahren

Das wird kaum an QuickIO liegen; kanns mir nicht vorstellen, was das sein soll.
Wüsste nicht was an dieser Stelle der Code Optimizer im Release Modus anders machen sollte - eher denke ich ist es eine Race Condition zB. wie Du mit Tasks umgehst.

Was auf alle Fälle fehlt ist ein ConfigureAwait.
Siehe Task Pitfalls

    await Task.Run(() =>
            {
               // Aufruf bleibt in cs.Start() hängen
                cs.Start();
            }).ConfigureAwait(false);

Hast nen Testprojekt, wo Du das Verhalten nachstellen kannst?
[Tutorial] Vertrackte Fehler durch Vergleich von echtem Projekt mit minimalem Testprojekt finden

Q
Quia_Respexit Themenstarter:in
9 Beiträge seit 2018
vor 5 Jahren

Guten Abend zusammen,

Entschuldigung für die späte Antwort, aber leider musste ich adhoc ins Krankenhaus.

Ich erhalte die gleiche Meldung auch bei einem Nicht await-Aufruf. Sobald ich am Rechner bin, werde ich ein Beispiel hochladen (schreibe gerade über mein Tablet aus der Klinik).

Gruß