我有一个异步任务方法,它将在前台和后台都可以访问。在前台,用户通过按钮调用该方法,而在后台,我有一个定时器在某个时间间隔触发该方法。如何防止异步任务方法同时调用
我试过把锁,但它给予异常等待不能在锁定语句。
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
如果计时器在用户交互之前触发了一会儿,该怎么办?这意味着,用户方法应该等待吗?或者你想中断后台方法并在以后继续? –