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;
}
}