.net multi Thread demo

来源:互联网 发布:德州软件开发 编辑:程序博客网 时间:2024/04/30 14:45

static object forSync = new object();

private static int connectionCount = 0;

public static int processedMatchCount = 0;



for (int i = 0; i < totalPostCount; i += _getRowCount)

                {
                    while (true)
                    {
                        int startIndex = i;
                        Thread processMatch = new Thread(() => updatePostByReMatch(reMatchCodeId, startIndex));
                        
                        lock (forSync)
                        {
                            if (connectionCount > _maxThreadCount)
                            {
                                Thread.Sleep(1000);
                            }
                            else
                            {
                                lock (forSync)
                                {
                                    connectionCount += 1;
                                }

                                processMatch.Start();
                                break;
                            }
                        }
                       
                    }

                }



 public void updatePostByReMatch(int reMatchCodeId, int startIndex)
        {           
            using (var db = new InstagramDataEntities())
            {
                var data = db.Database.SqlQuery<DataFromPostIdWithIdentity>(
                    "exec GetDataFromPostIdWithIdentity @StartWith,@Count",
                    new SqlParameter("StartWith", startIndex), new SqlParameter("Count", _getRowCount)).ToList();


                foreach (var post in data)
                {
                    var updatePostByReMatch = post.MatchIngredients();


                    try
                    {
                        db.Database.ExecuteSqlCommand(
                       "exec UpdatePostMatch @PostId,@MatchedTags,@NonMatchedTags,@ReMatchCodeId,@MatchScore",
                       new SqlParameter("PostId", post.PostId),
                       new SqlParameter("MatchedTags", updatePostByReMatch.MatchedTags??""),
                       new SqlParameter("NonMatchedTags", updatePostByReMatch.NonMatchedTags??""),
                       new SqlParameter("ReMatchCodeId", reMatchCodeId),
                       new SqlParameter("MatchScore", updatePostByReMatch.MatchScore));
                       processedMatchCount++;
                    }
                    catch (Exception ex)
                    {
                        log.Error(ex);
                        continue;
                    }
                   
                }


                lock (forSync)
                {
                    connectionCount -= 1;
                }

            }



0 0