小编Mic*_*elS的帖子

Parallel.Foreach 和 for every 产生不同的结果:为什么我的代码不安全?

我有一个文本文件,我将其读取为字符串content。为了识别我想要进一步处理的文本主体,我获取字符串中关键字的索引,然后将“起始”索引设置为找到的最小索引。

我尝试过这个Parallel.ForEach...

ConcurrentBag<int> indexes = new();
int index;

switch (Case)
{
    case 1:
        Parallel.ForEach(KeywordTypes.GetImplementedNamedObjects(), inos =>
        {
            index = content.IndexOf($"/begin {inos}");
            index = index == -1 ? content.Length : index;
            indexes.Add(index);
        });
        index = indexes.Min();
        return index;
Run Code Online (Sandbox Code Playgroud)

... 与foreach

foreach (string inos in KeywordTypes.GetImplementedNamedObjects())
{
    index = content.IndexOf($"/begin {inos}");
    index = index == -1 ? content.Length : index;
    indexes.Add(index);
}

index = indexes.Min();
return index;
Run Code Online (Sandbox Code Playgroud)

其中foreach产生预期结果但Parallel.ForEach没有产生。

为什么我的代码不是线程安全的?

c# concurrency thread-safety parallel.foreach

2
推荐指数
1
解决办法
315
查看次数

标签 统计

c# ×1

concurrency ×1

parallel.foreach ×1

thread-safety ×1