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”); } } } }
我得到一个System.IO.IOException,因为该文件“正在使用”。我错过了什么?进程是否在使用后不关闭文件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
我没有更多的细节,只是我必须这样使用它。文件访问操作都是同时进行的。我建议您在循环外部创建
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);
}