マルチスレッド タイマー配列があり、それぞれが同じ関数を呼び出しています。同じタスクを実行しますが、関数に異なる値を渡します。ただし、他のスレッドが同時に値を渡すため、価格の計算は正確ではありません。これを効率的に解決する方法について、私は int ID を渡して特定するのが異なる計算であるという考えを持っています。
ListOfValue ListOfValue[ListOfValue.ID] = ListOfValue;
double totalPriceSolve[ListOfValue.ID] =
ListOfValue[ListOfValue.ID].priceA + ListOfValue[ListOfValue.ID].PriceB;
しかし、上記のソリューションでは、すべてのデータを配列に変換する効率が悪く、スレッドセーフかどうかわかりません。
以下の計算は短すぎて問題が見えない可能性があるため、デモの例を単純化します。
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;
}