写入文件的结果没有按预期工作

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)
    }