【发布时间】:2020-02-21 10:00:05
【问题描述】:
在我的Asp.Net Core WebApi Controller 中,我收到了IFormFile[] files。我需要将其转换为List<DocumentData>。我第一次使用foreach。它工作正常。但后来决定更改为Parallel.ForEach,因为我收到了很多(> 5)个文件。
这是我的DocumentData 班级:
public class DocumentData
{
public byte[] BinaryData { get; set; }
public string FileName { get; set; }
}
这是我的Parallel.ForEach逻辑:
var documents = new ConcurrentBag<DocumentData>();
Parallel.ForEach(files, async (currentFile) =>
{
if (currentFile.Length > 0)
{
using (var ms = new MemoryStream())
{
await currentFile.CopyToAsync(ms);
documents.Add(new DocumentData
{
BinaryData = ms.ToArray(),
FileName = currentFile.FileName
});
}
}
});
例如,即使是两个文件作为输入,documents 也总是给出一个文件作为输出。我错过了什么吗?
我最初拥有List<DocumentData>。我发现它不是线程安全的并更改为ConcurrentBag<DocumentData>。但我仍然得到了意想不到的结果。请帮忙看看我哪里错了?
【问题讨论】:
标签: c# multithreading concurrency asp.net-core-webapi parallel.foreach