Пример #1
0
        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);
            }
        }
Пример #2
0
 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);
     }
 }