public void ExecuteOne(ILogDataAccessor <TIndex, TData> accessor) { if (accessor == null) { throw new ArgumentNullException(nameof(accessor)); } TaskData data; if (TryDequeue(out data)) { // DO NOT PLACE ANY CODE BETWEEN TryDequeue and Execute, EVER Execute(data, accessor); } }
private void Execute(TaskData data, ILogDataAccessor <TIndex, TData> accessor) { try { TData value; if (accessor.TryAccess(data.Index, out value)) { data.Finished(value); } else { // If this region of data can no longer be accessed, // then we cancel the request. data.Cancel(); } } catch (Exception e) { Log.ErrorFormat("Caught unexpected exception"); data.Failed(e); } }