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ß
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
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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ß