1

「既に使用中」のエラーの防止に関して、複数のクライアントから複数回呼び出された場合、最初のコード スニペットが潜在的に危険であるかどうかを尋ねたいですか? それとも、両方のコード ブロックが同じように安全ですか?

私が質問しているのは、2 番目のコードニペットが close メソッドを呼び出しており、これがより安全に聞こえる破棄も行うためです。

//FIRST
lock (_myLock)
{
    File.AppendAllText(_filePath, text);
}


//SECOND
lock (_myLock)
{
    TextWriter tw = new StreamWriter(_filePath, true);
    tw.Write(text);
    tw.Close();
}
4

3 に答える 3

5

どちらも同じです。File.AppendAllTextDispose も呼び出します。

private static void InternalAppendAllText(string path, string contents, Encoding encoding)
{
    using (StreamWriter writer = new StreamWriter(path, true, encoding))
    {
        writer.Write(contents);
    }
}
于 2012-01-03T09:27:53.310 に答える
1

どちらも同じように安全です。

Lock を適用したため、複数のクライアントから呼び出された場合でも、特定の時間に 1 つのスレッドしか実行されないため、危険ではなく、最初のオプションがより単純です。

MSDNがAppendAllText方法について述べているように

The file handle is guaranteed to be closed by this method

したがって、コードの最初の部分では、.Net はすでにアプローチ 2 で行っている余分な作業を行っています。

于 2012-01-03T09:26:30.377 に答える
1

File.AppendAllText が呼び出されたときに、後者で行っていることはすでに内部的に処理されていると思います

ここで同じことが答えられますFile.AppendAllText vs StreamWriter

于 2012-01-03T09:31:43.637 に答える