我有一个多线程计时器数组,每个都调用相同的函数。执行相同的任务,但将不同的值传递给函数。但是由于其他线程同时传入值,价格计算不准确。如何有效地解决这个问题,我有一个想法是传入一个 int ID 来识别不同的计算。
ListOfValue ListOfValue[ListOfValue.ID] = ListOfValue;
double totalPriceSolve[ListOfValue.ID] =
ListOfValue[ListOfValue.ID].priceA + ListOfValue[ListOfValue.ID].PriceB;
但上述解决方案我认为看起来效率不高,将所有数据转换为数组,我不确定是否是线程安全的。
简化 Demo 示例如下计算太短可能看不到问题。
System.Threading.Timer[] timerThread = new System.Threading.Timer[10];
for(int i=0; i< 10; i++){
timerThread[i] = new System.Threading.Timer(
new TimerCallback(MultiTimerTick2), ListOfValue ,2000, 2000);
}
private void MultiTimerTick2(object obj){
ListOfValue ListOfValue = (ListOfValue)obj;
//Perform job like read data from database, after calculation insert into database
double totalPrice = ListOfValue.priceA + ListOfValue.PriceB;
}