我有一个从阻塞集合中读取字符串的任务,并且应该将它们写到文件中。麻烦的是,在创建文件时,任务完成后文件的大小为 0 字节。
在调试时,我看到从阻塞集合中检索到非空行,并且流编写器被包装在using块中。
为了调试,我投入了一个不需要的冲洗并将这些行写入控制台。从阻塞集合中读取了 100 行非空文本。
// Stuff is placed in writeQueue from a different task
BlockingCollection<string> writeQueue = new BlockingCollection<string>();
Task writer = Task.Factory.StartNew(() =>
{
try
{
while (true)
{
using (FileStream fsOut = new FileStream(destinationPath, FileMode.Create, FileAccess.Write))
using (BufferedStream bsOut = new BufferedStream(fsOut))
using (StreamWriter sw = new StreamWriter(bsOut))
{
string line = writeQueue.Take();
Console.WriteLine(line); // Stuff is written to the console
sw.WriteLine(line);
sw.Flush(); // Just in case, makes no difference
}
}
}
catch (InvalidOperationException)
{
// We're done.
}
});
在调试器中单步执行,我看到程序以有序的方式终止。没有未处理的异常。
这里可能出了什么问题?