2017-06-11 14 views
0

アクションAPIでフォルダを作成する必要がある場合、同時実行性の問題はありますか?その場合は、適切な解決策は、次のコードディレクトリの作成と同時実行

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); 
     } 
    } 
    ... 
} 

のようにロックを使用することです、ロックオブジェクトとしてpath変数を使用することも論理的だろうか?

+3

文字列を使用してロックしないでください。これまで – spender

+2

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

+0

@spender:なぜですか?あなたは説明していただけますか? – Arrrr

答えて

5

Directory.CreateDirectoryを呼び出して、並行性について重視しないでください。ドキュメント(https://msdn.microsoft.com/en-us/library/54a0at6s(v=vs.110).aspx) から

ディレクトリがすでに存在する場合、このメソッドは新しい ディレクトリを作成しませんが、それは既存の ディレクトリのDirectoryInfoオブジェクトを返します。

+0

' Directory.CreateDirectory'ですか? – spender

+0

良いスポッティング、ありがとう@spender。 – mjwills

+0

それはまた 'CreateDirectory'だ、私は実際の間違いをした申し訳ありません! :D – Arrrr

関連する問題