0
나는 센서 세부 정보 목록을 가지고 있으며 각 센서에 대한 구성 설정을 얻고 비즈니스 논리를 적용해야합니다. 나는 각 센서가 같은 메소드를 호출하고 동시에 로직을 실행하는 것처럼 Aynchrosnously하고 싶다. Async를 시도해 보았고, 아래는 샘플이다. 아래에 나와있는대로 각 센서를 비동기 적으로 실행하는 데 도움이 될 경우 알려 주시기 바랍니다.비동기, 비동기 대기
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')를 사용해야합니다. –