private float _PhAvg;
_pHAVg 賦值
_PhAvg = DatabaseReader._Parameters
.SingleOrDefault(x => x.SpecificReg == RegCodes.phScode)
?.CurrentValue?.Average() ?? -9999;
檢查_pHAvg
Console.WriteLine("pH :" _pHAVg); 輸出 pH:6,77
呼叫方法
Task.Run(() => _SampleCheck.SampleLimitCheck(_PhAvg, _AkmAvg, _CodAvg));
這就是SampleLimitCheck方法
public void SampleLimitCheck(float PhAverage, float AkmAverage, float CodAverage)
{
Console.WriteLine("pH :" PhAverage);
}
檢查平均
Console.WriteLine("pH :" PhAverage); 輸出 pH:0
我給函式的浮點值有時是正確的,但有時在函式中顯示為 0。
當我打電話時,Task.Run(() => _SampleCheck.SampleLimitCheck(_PhAvg, _AkmAvg, _CodAvg));我看到函式中的值為 0。不是所有的時候。有時 0 有時我得到正確的值。
但是當我打電話時,_SampleCheck.SampleLimitCheck(_PhAvg, _AkmAvg, _CodAvg)我總是抓住正確的價值。
有什么問題Task.Run()?
uj5u.com熱心網友回復:
不知道代碼如何進行有點難以知道它可能是什么。
但既然它是一個任務,我可以猜到你為什么要在它準備好之前讀取結果。
Task.Run(() => _SampleCheck.SampleLimitCheck(_PhAvg, _AkmAvg, _CodAvg)); Debug.WriteLine("-----");
在本示例中,即使在 _SampleCheck.SampleLimitCheck 完成之前,Debug 也將運行。
如果您需要結果,則必須確保首先完成任務。
uj5u.com熱心網友回復:
正如目前所寫,很難確切地知道您的問題是什么。
我猜
_PhAvg是成員欄位。Run.Task在異步執行緒中獲取正確值之前執行,因此_PhAvg是成員默認值。
錯誤的代碼
Task.Run(() => _PhAvg = 10);
Task.Run(() => _SampleCheck.SampleLimitCheck(_PhAvg, _AkmAvg, _CodAvg));
正確的代碼
await Task.Run(() => _PhAvg = 10);
await Task.Run(() => _SampleCheck.SampleLimitCheck(_PhAvg, _AkmAvg, _CodAvg));
原則是確保_PhAvg賦值必須在Task.Run.
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/402015.html
上一篇:Haskell在函式中使用終止
