Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用线程时发生IOException 使用系统数值; 使用System.Threading.Tasks; 命名空间Fibonacci_cs { 班级计划 { 静态void Main(字符串[]参数) { int i; var ausgabe=Task.Factory.StartNew((()=>{})); 大整数x,y=1,z=1; 对于(i=1;i{z=biginger.Add(x,y);})); Task.Factory.StartNew((()=> { 如果(原因已完成) { ausgabe=Task.Factory.StartNew((()=> { 使用(System.IO.StreamWriter file=new System.IO.StreamWriter(@“A:\Fibonacci.txt”)) { file.WriteLine(“i:+i”); file.WriteLine(“z:+z”); } })); } })); } Task.WaitAll(); 使用(System.IO.StreamWriter)文件= 新System.IO.StreamWriter(@“A:\Fibonacci.txt”)) { file.WriteLine(“i:+i”); file.WriteLine(“z:+z”); } } } }_C#_Multithreading_File - Fatal编程技术网

C# 使用线程时发生IOException 使用系统数值; 使用System.Threading.Tasks; 命名空间Fibonacci_cs { 班级计划 { 静态void Main(字符串[]参数) { int i; var ausgabe=Task.Factory.StartNew((()=>{})); 大整数x,y=1,z=1; 对于(i=1;i{z=biginger.Add(x,y);})); Task.Factory.StartNew((()=> { 如果(原因已完成) { ausgabe=Task.Factory.StartNew((()=> { 使用(System.IO.StreamWriter file=new System.IO.StreamWriter(@“A:\Fibonacci.txt”)) { file.WriteLine(“i:+i”); file.WriteLine(“z:+z”); } })); } })); } Task.WaitAll(); 使用(System.IO.StreamWriter)文件= 新System.IO.StreamWriter(@“A:\Fibonacci.txt”)) { file.WriteLine(“i:+i”); file.WriteLine(“z:+z”); } } } }

C# 使用线程时发生IOException 使用系统数值; 使用System.Threading.Tasks; 命名空间Fibonacci_cs { 班级计划 { 静态void Main(字符串[]参数) { int i; var ausgabe=Task.Factory.StartNew((()=>{})); 大整数x,y=1,z=1; 对于(i=1;i{z=biginger.Add(x,y);})); Task.Factory.StartNew((()=> { 如果(原因已完成) { ausgabe=Task.Factory.StartNew((()=> { 使用(System.IO.StreamWriter file=new System.IO.StreamWriter(@“A:\Fibonacci.txt”)) { file.WriteLine(“i:+i”); file.WriteLine(“z:+z”); } })); } })); } Task.WaitAll(); 使用(System.IO.StreamWriter)文件= 新System.IO.StreamWriter(@“A:\Fibonacci.txt”)) { file.WriteLine(“i:+i”); file.WriteLine(“z:+z”); } } } },c#,multithreading,file,C#,Multithreading,File,我得到一个System.IO.IOException,因为该文件“正在使用”。我错过了什么?进程是否在使用后不关闭文件 我没有更多的细节,只是我必须这样使用它。文件访问操作都是同时进行的。我建议您在循环外部创建StreamWriter,并在此流对象上使用lock,在该流对象上使用using块 e、 g 听起来您正试图同时从不同线程写入同一文件。该文件通过多个试图写入的线程(执行您创建的任务)访问。为什么要这样做?文件写入操作不是线程安全的,您应该用另一种方法来做。为什么您调用Task.WaitA

我得到一个System.IO.IOException,因为该文件“正在使用”。我错过了什么?进程是否在使用后不关闭文件


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

文件访问操作都是同时进行的。我建议您在循环外部创建
StreamWriter
,并在此流对象上使用
lock
,在该流对象上使用using块

e、 g


听起来您正试图同时从不同线程写入同一文件。该文件通过多个试图写入的线程(执行您创建的任务)访问。为什么要这样做?文件写入操作不是线程安全的,您应该用另一种方法来做。为什么您调用Task.WaitAll而不向其传递任何任务?这是毫无意义的,因为它根本不会等待。所有这些任务的东西应该在这里做什么?
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);
            }
        }
    }
}
var streamWriter = new System.IO.StreamWriter(@"A:\Fibonacci.txt");
//for loop
    lock (streamWriter)
    {
        streamWriter.WriteLine("i: " + i);
        streamWriter.WriteLine("z: " + z);
    }