写入文件的结果没有按预期工作
The result written to the file does not work as expected
我使用多线程将结果写入文件。我有 100 个结果,但保存到文件的结果数只有 30 个结果。我该怎么办?
public async Task FileWriteAsync(string text)
{
string file = @"uid.txt";
using (FileStream sourceStream = new FileStream(file, FileMode.Append, FileAccess.Write, FileShare.None, bufferSize: 4096, useAsync: true))
using (StreamWriter f = new StreamWriter(sourceStream))
{
await f.WriteLineAsync(text);
}
}
public void ExFile(int line)
{
var uid = Regex.Match(txt_ListUID.Lines[line], @"c_user=(.*?);").Groups[1].ToString().Trim();
string text = uid + "|zxzxzx";
_ = FileWriteAsync(text)
}
你可以试试 ReaderWriterLock
Namespace: System.Threading
.NET Framework 提供了几个线程锁定原语。 ReaderWriterLock 就是其中之一。
ReaderWriterLock
class 用于同步对资源的访问。在任何给定时间,它都允许对多个(基本上是无限的)线程进行并发读取访问,或者它允许对单个线程进行写入访问。在资源被频繁读取但不经常更新的情况下,ReaderWriterLock
将提供比独占监视器锁更好的吞吐量。
ReaderWriterLock Class examples
已编辑
public async Task FileWriteAsync(string text)
{
ReaderWriterLock locker = new ReaderWriterLock();
try
{
locker.AcquireWriterLock(int.MaxValue); //You might wanna change timeout value
string file = @"uid.txt";
using (FileStream sourceStream = new FileStream(file, FileMode.Append, FileAccess.Write, FileShare.None, bufferSize: 4096, useAsync: true))
using (StreamWriter f = new StreamWriter(sourceStream))
{
await f.WriteLineAsync(text);
}
}
finally
{
locker.ReleaseWriterLock();
}
}
public void ExFile(int line)
{
var uid = Regex.Match(txt_ListUID.Lines[line], @"c_user=(.*?);").Groups[1].ToString().Trim();
string text = uid + "|zxzxzx";
_ = FileWriteAsync(text)
}
我使用多线程将结果写入文件。我有 100 个结果,但保存到文件的结果数只有 30 个结果。我该怎么办?
public async Task FileWriteAsync(string text)
{
string file = @"uid.txt";
using (FileStream sourceStream = new FileStream(file, FileMode.Append, FileAccess.Write, FileShare.None, bufferSize: 4096, useAsync: true))
using (StreamWriter f = new StreamWriter(sourceStream))
{
await f.WriteLineAsync(text);
}
}
public void ExFile(int line)
{
var uid = Regex.Match(txt_ListUID.Lines[line], @"c_user=(.*?);").Groups[1].ToString().Trim();
string text = uid + "|zxzxzx";
_ = FileWriteAsync(text)
}
你可以试试 ReaderWriterLock
Namespace: System.Threading
.NET Framework 提供了几个线程锁定原语。 ReaderWriterLock 就是其中之一。
ReaderWriterLock
class 用于同步对资源的访问。在任何给定时间,它都允许对多个(基本上是无限的)线程进行并发读取访问,或者它允许对单个线程进行写入访问。在资源被频繁读取但不经常更新的情况下,ReaderWriterLock
将提供比独占监视器锁更好的吞吐量。
ReaderWriterLock Class examples
已编辑
public async Task FileWriteAsync(string text)
{
ReaderWriterLock locker = new ReaderWriterLock();
try
{
locker.AcquireWriterLock(int.MaxValue); //You might wanna change timeout value
string file = @"uid.txt";
using (FileStream sourceStream = new FileStream(file, FileMode.Append, FileAccess.Write, FileShare.None, bufferSize: 4096, useAsync: true))
using (StreamWriter f = new StreamWriter(sourceStream))
{
await f.WriteLineAsync(text);
}
}
finally
{
locker.ReleaseWriterLock();
}
}
public void ExFile(int line)
{
var uid = Regex.Match(txt_ListUID.Lines[line], @"c_user=(.*?);").Groups[1].ToString().Trim();
string text = uid + "|zxzxzx";
_ = FileWriteAsync(text)
}