【发布时间】: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