对于我们的项目,我们有一张桌子,可以在其中获得一天比赛的所有足球结果。根据他们的SQL数据库值,将显示输入,用户可以在其中添加匹配结果。当我们点击“保存”按钮时,将触发插入数据库。出于某些原因,有时并非所有行都会添加到数据库中。
[HttpPost("UpdateMatchDayScore")]
public async void UpdateMatchDayScore([FromBody]UpdateMatchDayScoreViewModel[] model)
{
var matchDayId = model[0].matchDayId;
var poolId = model[0].poolId;
RankingSearch rankingSearch = await _rankingService.CreateNewRanking(matchDayId, poolId);
foreach (var t in model)
{
_matchDayService.UpdateMatchDayScore(rankingSearch.RankingId,t.poolId, t.homeTeamId, t.awayTeamId, Int32.Parse(t.scoreHome),Int32.Parse(t.scoreAway), t.matchDayId);
}
_calculateRanking.CalculatePosition(rankingSearch.RankingId);
}
这是我们的视图模型:
public class UpdateMatchDayScoreViewModel
{
public int poolId { get; set; }
public int homeTeamId { get; set; }
public int awayTeamId { get; set; }
public string scoreHome { get; set; }
public string scoreAway { get; set; }
public int matchDayId { get; set; }
}
这是我们比赛日的资源库:
public async void UpdateMatchDayScore(int poolId, int homeTeamId, int awayTeamId,
int scoreHome, int scoreAway,
int matchDayId)
{
using (var conn = _connector.OpenConnection())
{
await conn.QueryAsync<MatchDay>(StoredProcs.UpdateMatchScore,
new
{
pouleId = poolId,
awayTeamId = awayTeamId,
homeTeamId= homeTeamId,
scoreAway = scoreAway,
scoreHome = scoreHome,
matchDayId = matchDayId
}, CommandType.StoredProcedure);
}
}
这是我们的比赛日服务:
public void UpdateMatchDayScore(int rankingId, int poolId, int homeTeamId, int awayTeamId, int scoreHome, int scoreAway, int matchDayId)
{
_calculateRanking.CalculateRankings(rankingId, matchDayId, awayTeamId, homeTeamId, scoreHome, scoreAway);
_matchDayRepository.UpdateMatchDayScore(poolId, homeTeamId, awayTeamId, scoreHome, scoreAway,
matchDayId);
}
样本模型:
{
pouleId = 46273,
awayTeamId = 400069,
homeTeamId= 400002,
scoreAway = 2,
scoreHome = 4,
matchDayId = 12}
我们进行了一些数学运算,总共为一个比赛日(包含8场比赛)打开了41个联系。我们认为我们可能一次做很多事情?有人可以帮助我们吗?
答案 0 :(得分:0)
这看起来不像是连接数问题,而是您调用方法的方式。
您的代码混合了Async和Sync方法。最重要的是,并非在所有地方都使用“ await”来正确调用Async方法。这是麻烦的公开邀请。
阅读这篇文章,以了解当您这样做时可能遇到的问题。 https://blog.stephencleary.com/2012/07/dont-block-on-async-code.html
注意:这篇文章讨论了死锁,但也适用于您的情况。
我假设foreach
循环由于在某些情况下未收到正确的Task
状态而缺少更新某些记录。
我建议,如果您不熟悉async-await
域,请先尝试仅使用同步方法的代码,然后再尝试应用async
功能。
如果某些方法仅用于async
,则可以在代码末尾添加.Wait()
方法,以使代码等待Task
完成后再移至下一条语句执行。
希望这会有所帮助!