我使用多线程将结果写入文件。我有100个结果,但是保存到文件中的结果数只有30个结果。我该怎么办?
uid | data
1 | {"item1":"string1", "item2":"string2"}
2 | {"item2":"string3", "item5":"string1", "item7":"string5"}
3 | {"item1":"string3", "item4":"string1", "item6":"string8", "item5":"string5"}
4 | {"item1":"string4"}
答案 0 :(得分:1)
您可以尝试ReaderWriterLock
命名空间:System.Threading
.NET Framework提供了几种线程锁定原语。 ReaderWriterLock是其中之一。
ReaderWriterLock
类用于同步对资源的访问。在任何给定时间,它都允许对多个(基本上是无限个)线程的并发读取访问,或者允许对单个线程的写访问。在资源被频繁读取但不经常更新的情况下,ReaderWriterLock
将提供比独占Monitor锁更好的吞吐量。
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)
}