Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Best practice zur Löschung mehrerer Dateien nach Upload
emuuu
myCSharp.de - Member

Avatar #avatar-4078.jpg


Dabei seit:
Beiträge: 285

Themenstarter:

Best practice zur Löschung mehrerer Dateien nach Upload

beantworten | zitieren | melden

Moin zusammen,

hab mal eine Frage die ein bisschen ins Verständnis von Tasks geht:
(Vereinfachte) Ausgangslage: Hab eine List<string> die zu verschiedenen Dateien führen, diese sollen in einen MultipartFormDataContent gepackt und dann via httpclient.PostAsynch hochgeschickt werden und danach gelöscht werden.
Von der Struktur her in etwa so:


interface IServiceA
{
   Task<MultipartFormDataContent> BuildFormData(IEnumerable<string> filePaths);
}

interface IServiceB
{
   Task UploadFormData(MultipartFormDataContent formData);
}

class ServiceC
{
   async Task FetchAndUploadFiles()
   {
      var files = await GetFileListFromSomewhere();
      var formData = await _iServiceA.BuildFormData(files);
      await _iServiceB.UploadFormData(formData);
   }
}


Hier ist jetzt die Frage wie der beste Weg ist dies anzugehen:
Wenn ich das File.Delete direkt hinter den UploadFormData() packe sind die Dateien natürlich vom Prozess noch blockiert.
Für eine einzelne Datei würde ich einfach ein using-Statement für den FileStream um die Methoden setzen und danach löschen.
Wenn ich allerdings X Dateien habe ist mir nicht ganz klar wie hier der saubere weg aussieht.

Beste Grüße
emuuu
2+2=5 (für extrem große Werte von 2)
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.764

beantworten | zitieren | melden

Zitat von emuuu
Wenn ich das File.Delete direkt hinter den UploadFormData() packe sind die Dateien natürlich vom Prozess noch blockiert.
Das hört sich eher nach einem Bug an, das sollte nicht so sein.
Ist es bei meinen Implementierungen auch nicht: ich lösche auch sofort nach dem Upload.
private Nachricht | Beiträge des Benutzers
emuuu
myCSharp.de - Member

Avatar #avatar-4078.jpg


Dabei seit:
Beiträge: 285

Themenstarter:

beantworten | zitieren | melden

Hab gerade festgestellt, dass MultipartFormDataContent auch IDisposable implementiert.
So funktioniert es jetzt:


   async Task FetchAndUploadFiles()
   {
      var files = await GetFileListFromSomewhere();
      using(var formData = await _iServiceA.BuildFormData(files))
     {
        await _iServiceB.UploadFormData(formData);
     }
     //delete files
   }

Schätze ich hab in meiner ersten Implementierung die einzelnen FileStreams irgendwie squishy gehandled.
2+2=5 (für extrem große Werte von 2)
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.764

beantworten | zitieren | melden

Denk dran, dass es auch IAsyncDisposable gibt und damit ein await using möglich ist.
Und wenns Lib-Code ist, dann solltest Du auch ConfigureAwait(false) nutzen; so lästig es auch ist.
private Nachricht | Beiträge des Benutzers