【问题标题】:Multi threading leading to race conditions多线程导致竞争条件
【发布时间】:2019-09-25 19:11:33
【问题描述】:

这是我的sn-p

Public async Task DoSomething(List<T> dataList)
{
    foreach (T claim in dataList)
    {
        var claimLineTask = AssembleClaimLines(claim);
        tasks.Add(claimLineTask);
    }
    await Task.WhenAll(tasks);
    return dataList;
}

protected async Task AssembleClaimLines(T claim)
{
    connector.ConfigSettingsSection = "Claims.Lines";
    connector.QueryParameters = new Dictionary<string, string>()
    {
        {“id”, claim.ID.ToString()},
    };
    claim.data = await connector.GetData()            
    return;
}

我在调用AssembleClaimLines() 时遇到了竞争条件。connector.QueryParameters 的值被其中一个线程覆盖。最终,我有很多重复的电话。

一个简单的解决方法是,我可以将connector 作为AssembleClaimLines 的参数传递。但我不能这样做,因为 connector 是从依赖注入传入的。我还能如何解决竞争条件并仍然充分利用多线程?

【问题讨论】:

    标签: c# multithreading race-condition


    【解决方案1】:

    您的Connector API 需要更改以支持多个并发调用(例如,将ConfigSettingsSection/QueryParameters 移动到GetData 上的参数),或者您需要获取多个Connector 实例(例如,注入 ConnectorFactory 而不是 Connector)。

    【讨论】:

      猜你喜欢
      • 2016-10-12
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多