asyncを使用して行を書きたい場合は、await
を使用してください。ファイルが破損している可能性があり、のようなストリームエラーが発生した可能性があります。「ストリームはすでに使用中です」つまり、書き込み操作を同期させる必要があります。 例を挙げました。
private async Task WriteToFileAsAsync()
{
string file = @"sample.txt";
using (FileStream stream = new FileStream(file, FileMode.Create, FileAccess.ReadWrite))
{
using (StreamWriter streamWriter = new StreamWriter(stream))
{
for (int i = 0; i < 1000; i++)
{
await streamWriter.WriteLineAsync(i.ToString());
}
}
}
}
また、あなたはStreamWriter
using
内のブロックを閉じて処分することができます。
EDIT
あなたはメインスレッドとは別に、書き込み動作を実行する場合は、非同期メソッドを使用して、ちょうど別々Task
を作成し、それを別のスレッドを割り当てないでください。
private void WriteToFile()
{
string file = @"sample.txt";
using (FileStream stream = new FileStream(file, FileMode.Create, FileAccess.ReadWrite))
{
using (StreamWriter streamWriter = new StreamWriter(stream))
{
for (int i = 0; i < 1000; i++)
{
streamWriter.WriteLine(i.ToString());
}
}
}
}
次に、このように呼び出します。
Task.Factory.StartNew(WriteToFile);
非同期メソッドを使用する場合は、それらを待つ必要があります。ストリームを正しく書き込んだり閉じたりする唯一の方法です。それ以外の場合は、WriteLineを使用して非同期を避けてください。 – Nkosi
@NkosiなぜWriteLineAsyncが必要な場合は、awitを使用する必要がありますか?私は結果を待たずに、WriteLineを使いたくない。なぜなら、行が書き込まれるまで待たずにいるからだ。 – sdassf
'WriteLineAync'を' await'なしで呼び出すとファイルが壊れる。あなたは非同期/待機の目的を理解していないようです。これは[XY問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)のようです。あなたが達成しようとしている究極の目標は何ですか? – Nkosi