2017-06-11 6 views
0

Wenn ein Ordner in einer Aktions-API erstellt werden muss, wäre ein Concurrency-Problem betroffen? Wenn ja, wäre die richtige LösungVerzeichniserstellung und Parallelität

public async Task<IActionResult> UploadFile(User user){ 
    ... 
    var file = HttpContext.Request.Form.File["SomeFile"]; 
    ... 
    var path = Path.Combile(hostingEnvironment.WebRoot, configurationRoot["BaseDirectory"], user.Id); 
    lock(path){ 
     if(!Directory.Exists(path)){ 
      Directory.CreateDirectory (path); 
     } 
    } 
    ... 
} 

Wäre es auch logisch, eine Sperre wie in dem folgenden Code verwenden, um die path Variable als das Verriegelungsobjekt zu benutzen?

+3

Verwenden Sie keine Zeichenfolgen zum Sperren. Je. – spender

+2

https://stackoverflow.com/questions/12804879/is-it-ok-to-use-a-string-as-a-lock-object – spender

+0

@spender: Warum? Kannst du bitte Erklären. – Arrrr

Antwort

5

Rufen Sie einfach Directory.CreateDirectory an und betonen Sie nicht die Nebenläufigkeit.

Aus der Dokumentation (https://msdn.microsoft.com/en-us/library/54a0at6s(v=vs.110).aspx) :

Wenn das Verzeichnis bereits vorhanden ist, diese Methode schafft keine neuen Verzeichnis, aber es gibt ein Directory Objekt für das bestehende Verzeichnis.

+0

Ist das nicht' Directory.CreateDirectory'? – spender

+0

Gute Spotting, danke @spender. – mjwills

+0

Es ist auch 'CreateDirectory', sorry ich habe den Fehler gemacht! : D – Arrrr