我們經常在后臺執行數據操作前,會先進行一些業務邏輯檢查。
一般會用順序檢查的方式,即:
業務邏輯1檢查==》業務邏輯2檢查=》…保存
e.g: 在刪除記錄之前,做一些邏輯檢查
//檢查1:
var programs = _practiceService.GetPracticeByProgramId(programId);
if (programs.Any() && programs.Where(x => x.PSId ==sessionId)
{
return Json(new
{
success = false,
msg = "不可刪除!存在有效關聯記錄。"
});
}
//檢查2:
var progSession = _programService.GetProgramSessionByProgramId(programId)?.Where(x=>x.Id == sessionId).FirstOrDefault();
if (progSession == null)
{
return Json(new
{
success = false,
msg = "找不到刪除的記錄。"
});
}
//執行
var deleted = _programService.DeleteProgramSession(progSession.Result) > 0;
return Json(new
{
success = deleted,
msg = deleted ? "刪除成功。" : "刪除不成功。"
});
如果上述業務邏輯檢查耗時長效率低,我們可用 Task 并行進行檢查,再執行刪除操作, 改為:
//檢查1:
Task<bool> ifExistPractices = Task.Run(()=>
{
var programs = _practiceService.GetPracticeByProgramId(programId);
return (programs.Any() && programs.Where(x => x.PSId == sessionId).Any());
});
//檢查2:
Task<ProgramSession> progSession = Task.Run(() =>
{
return _programService.GetProgramSessionByProgramId(programId)?.Where(x => x.Id == sessionId).FirstOrDefault();
});
await Task.WhenAll(ifExistPractices, progSession);
if (ifExistPractices.Result || progSession.Result == null)
{
return Json(new
{
success = false,
msg = ifExistPractices.Result ? "不可刪除!當前存在有效關聯記錄。" : "找不到刪除的記錄。"
});
}
//執行
var deleted = _programService.DeleteProgramSession(progSession.Result) > 0;
return Json(new
{
success = deleted,
msg = deleted ? "刪除成功。" : "刪除不成功。"
});