使用线程时出现IOException

时间:2015-11-15 21:20:21

标签: c# multithreading file

using System.Numerics;
using System.Threading.Tasks;

namespace Fibonacci_cs
{
    class Program
    {
        static void Main(string[] args)
        {
            int i;
            var ausgabe = Task.Factory.StartNew((() => {}));
            BigInteger x, y = 1, z = 1;
            for (i = 1; i < int.MaxValue; i++)
            {
                x = y;
                Task.WaitAll();
                y = z;
                Task.Factory.StartNew((() => { z = BigInteger.Add(x, y); }));
                Task.Factory.StartNew((() =>
                {
                    if (ausgabe.IsCompleted)
                    {
                        ausgabe = Task.Factory.StartNew((() =>
                        {
                            using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"A:\Fibonacci.txt"))
                            {
                                file.WriteLine("i: " + i);
                                file.WriteLine("z: " + z);
                            }
                        }));
                    }
                }));
            }

            Task.WaitAll();
            using (System.IO.StreamWriter file =
                new System.IO.StreamWriter(@"A:\Fibonacci.txt"))
            {
                file.WriteLine("i: " + i);
                file.WriteLine("z: " + z);
            }
        }
    }
}

我收到System.IO.IOException,因为该文件是&#34;正在使用&#34;。我错过了什么?使用后,进程是否未关闭文件?

我没有更多细节,只是我必须这样使用它。

1 个答案:

答案 0 :(得分:0)

文件访问操作全部同时发生。我建议您在循环外部创建lock,并在此流对象上使用var streamWriter = new System.IO.StreamWriter(@"A:\Fibonacci.txt"); //for loop lock (streamWriter) { streamWriter.WriteLine("i: " + i); streamWriter.WriteLine("z: " + z); }

e.g。

{{1}}