我有一個異步任務方法,它將在前臺和後臺都可以訪問。在前臺,用戶通過按鈕調用該方法,而在後臺,我有一個定時器在某個時間間隔觸發該方法。如何防止異步任務方法同時調用
我試過把鎖,但它給予異常等待不能在鎖定語句。
public static async Task<CommonResult<IEnumerable<AttendanceDTO>>> DownloadAttendanceAsync(string selectedDate, int siteId)
{
try
{
if (new AttendanceBLL().IsLocalDataAvailable(siteId, DateTime.Parse(selectedDate)))
return new CommonResult<IEnumerable<AttendanceDTO>>() { IsSuccess = true, Data = null };
var queue = new EntityQueueBLL();
//var latestUpdatedOn = queue.GetMaxUpdated(siteId, EntityIDEnum.Attendance);
var url = string.Format(Constants.PathPullAttendance, selectedDate, siteId);
var result = await new HttpRequestClient().GetRequest<IEnumerable<AttendanceDTO>>(url);
if (!result.IsSuccess)
return new CommonResult<IEnumerable<AttendanceDTO>>() { IsSuccess = false, Data = null, ErrorMessage = result.ErrorMessage };
if (result.Data != null && result.Data.Count() > 0)
{
var maxUpdatedOn = result.Data.Max(x => DateTime.Parse(x.UpdatedOn));
queue.Add(siteId, result.Data, result.Data.Count(), EntityIDEnum.Attendance, EntityType.Attendance, maxUpdatedOn);
}
return new CommonResult<IEnumerable<AttendanceDTO>> { IsSuccess = true, Data = result.Data };
}
catch (Exception e)
{
return new CommonResult<IEnumerable<AttendanceDTO>> { IsSuccess = false, Data = null, ErrorMessage = "Download Error" };
}
}
嗨,你究竟想要完成什麼?如果兩個事件都只需要調用一次方法,還是希望等到第一次完成後再調用它,您是否想要? –
如果用戶調用方法,後臺不應該調用,直到第一次完成。 – LittleFunny
如果計時器在用戶交互之前觸發了一會兒,該怎麼辦?這意味着,用戶方法應該等待嗎?或者你想中斷後臺方法並在以後繼續? –