首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步,异步等待

异步,异步等待
EN

Stack Overflow用户
提问于 2016-10-19 06:58:40
回答 1查看 38关注 0票数 0

我有传感器的细节列表,我需要获得每个传感器的配置设置,并应用一些业务逻辑。我想做Aynchrosnously,就像每个传感器都会调用相同的方法并同时执行其逻辑一样,我尝试了异步和等待,下面是示例。请让我知道,如果以下将有助于执行每个传感器异步执行。

代码语言:javascript
复制
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;
            }
        }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-19 07:05:56

是的,它们将异步执行。但不是平行的。我认为你甚至不应该试图使它并行,除非你有一个非常明确的性能问题。

并行(例如Parallel.ForEach())将同时打开多个SqlConnections。不清楚您正在运行的是哪种系统,以及预期的是什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40124286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档