0
私はセンサーの詳細のリストを持っており、私は各センサーの設定を取得し、ビジネスロジックを適用する必要があります。私はAynchrosnouslyしたい、各センサーが同じメソッドを呼び出して、同じ時間にそのロジックを実行するように。私は非同期で試してみると、サンプルが下にあります。下記の方法で各センサを非同期に実行すると助けてください。非同期、非同期待機
public static async Task GetSensor()
{
List<SensorMaster> sensorAddress = GetSensorService();
foreach (SensorMaster sensorInfo in sensorAddress)
{
await ParseSensor(sensorInfo);
}
}
private static async Task ParseSensor(SensorMaster senInfo)
{
List<Sensor> sTestdownTime = await GetTestDownTime(senInfo);
if (DateTime.Parse(sTestdownTime[0].LastHeartBeatAt.ToString()).Year > 1900)
{
CreateEvent(senInfo, sTestdownTime);
}
}
public static async Task<List<Sensor>> GetTestDownTime(SensorMaster senInfo)
{
List<Sensor> lstSensor = new List<Sensor>();
var connectionString = "Data Source=xxxx;Initial Catalog=xx;persist security info=True;User ID=xx;Password=xxx;";
var asyncConnectionString = new SqlConnectionStringBuilder(connectionString) { AsynchronousProcessing = true }.ToString();
using (var cn = new SqlConnection(asyncConnectionString))
{
cn.Open();
SqlCommand cmd = new SqlCommand("SetingSp", cn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@StationType", senInfo.SensorName));
cmd.Parameters.Add(new SqlParameter("@ThresholdValue", senInfo.SensorThreshold));
using (SqlDataReader dr = await cmd.ExecuteReaderAsync())
{
if (dr.HasRows)
{
while (dr.Read())
{
Sensor cpData = new Sensor();
cpData.SensorName = dr["SensorName"].ToString();
cpData.LastHeartBeatAt = Convert.ToDateTime(dr["LastTimeStamp"]);
lstSensor.Add(cpData);
}
}
}
return lstSensor;
}
}
'GetTestDownTime'では、例えば' SqlConnection.OpenAsync'と 'SqlDataReader.ReadAsync'のようなすべての非同期メソッドを使うべきです。 –