本文整理汇总了C#中Model.GetKey方法的典型用法代码示例。如果您正苦于以下问题:C# Model.GetKey方法的具体用法?C# Model.GetKey怎么用?C# Model.GetKey使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Model
的用法示例。
在下文中一共展示了Model.GetKey方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: CreateGeneralWorkQueueItemDetails
private static WorkQueueDetails CreateGeneralWorkQueueItemDetails(Model.WorkQueue item)
{
var detail = new WorkQueueDetails();
detail.Key = item.Key;
detail.ScheduledDateTime = item.ScheduledTime;
detail.ExpirationTime = item.ExpirationTime;
detail.InsertTime = item.InsertTime;
detail.FailureCount = item.FailureCount;
detail.Type = item.WorkQueueTypeEnum;
detail.Status = item.WorkQueueStatusEnum;
detail.Priority = item.WorkQueuePriorityEnum;
detail.FailureDescription = item.FailureDescription;
detail.ServerDescription = item.ProcessorID;
StudyStorageLocation storage = WorkQueueController.GetLoadStorageLocation(item);
detail.StorageLocationPath = storage.GetStudyPath();
// Fetch UIDs
var wqUidsAdaptor = new WorkQueueUidAdaptor();
var uidCriteria = new WorkQueueUidSelectCriteria();
uidCriteria.WorkQueueKey.EqualTo(item.GetKey());
IList<WorkQueueUid> uids = wqUidsAdaptor.Get(uidCriteria);
var mapSeries = new Hashtable();
foreach (WorkQueueUid uid in uids)
{
if (mapSeries.ContainsKey(uid.SeriesInstanceUid) == false)
mapSeries.Add(uid.SeriesInstanceUid, uid.SopInstanceUid);
}
detail.NumInstancesPending = uids.Count;
detail.NumSeriesPending = mapSeries.Count;
// Fetch the study and patient info
var ssAdaptor = new StudyStorageAdaptor();
StudyStorage storages = ssAdaptor.Get(item.StudyStorageKey);
var studyAdaptor = new StudyAdaptor();
var studycriteria = new StudySelectCriteria();
studycriteria.StudyInstanceUid.EqualTo(storages.StudyInstanceUid);
studycriteria.ServerPartitionKey.EqualTo(item.ServerPartitionKey);
Study study = studyAdaptor.GetFirst(studycriteria);
// Study may not be available until the images are processed.
if (study != null)
{
var studyAssembler = new StudyDetailsAssembler();
detail.Study = studyAssembler.CreateStudyDetail(study);
}
return detail;
}
示例2: ReconcileStudyWorkQueue
public ReconcileStudyWorkQueue(Model.WorkQueue workqueue)
{
Platform.CheckTrue(workqueue.WorkQueueTypeEnum.Equals(WorkQueueTypeEnum.ReconcileStudy),
String.Format("Cannot copy data from Work Queue record of type {0}",
workqueue.WorkQueueTypeEnum));
this.SetKey(workqueue.GetKey());
this.Data= workqueue.Data;
this.InsertTime = workqueue.InsertTime;
this.DeviceKey = workqueue.DeviceKey;
this.ExpirationTime = workqueue.ExpirationTime;
this.FailureCount = workqueue.FailureCount;
this.FailureDescription = workqueue.FailureDescription;
this.GroupID = workqueue.GroupID;
this.InsertTime = workqueue.InsertTime;
this.ProcessorID = workqueue.ProcessorID;
this.ScheduledTime = workqueue.ScheduledTime;
this.ServerPartitionKey = workqueue.ServerPartitionKey;
this.StudyHistoryKey = workqueue.StudyHistoryKey;
this.StudyStorageKey = workqueue.StudyStorageKey;
this.WorkQueuePriorityEnum = workqueue.WorkQueuePriorityEnum;
this.WorkQueueStatusEnum = workqueue.WorkQueueStatusEnum;
this.WorkQueueTypeEnum = this.WorkQueueTypeEnum;
}
示例3: LoadUids
/// <summary>
/// Load the specific SOP Instance Uids in the database for the WorkQueue item.
/// </summary>
/// <param name="item">The WorkQueue item.</param>
protected void LoadUids(Model.WorkQueue item)
{
if (_uidList==null)
{
UidsLoadTime.Add(delegate
{
using (ServerExecutionContext context = new ServerExecutionContext())
{
IWorkQueueUidEntityBroker select = context.ReadContext.GetBroker<IWorkQueueUidEntityBroker>();
WorkQueueUidSelectCriteria parms = new WorkQueueUidSelectCriteria();
parms.WorkQueueKey.EqualTo(item.GetKey());
_uidList = select.Find(parms);
_uidList = TruncateList(item, _uidList);
}
}
);
}
}
示例4: RaiseAlert
public void RaiseAlert(Model.WorkQueue queueItem, AlertLevel level, string message)
{
if (WorkQueueProperties.AlertFailedWorkQueue || level == AlertLevel.Critical)
{
ServerPlatform.Alert(AlertCategory.Application, level,
queueItem.WorkQueueTypeEnum.ToString(), AlertTypeCodes.UnableToProcess,
GetWorkQueueContextData(queueItem), TimeSpan.Zero,
"Work Queue item failed: Type={0}, GUID={1}: {2}",
queueItem.WorkQueueTypeEnum,
queueItem.GetKey(), message);
}
}
示例5: InternalPostponeWorkQueue
private void InternalPostponeWorkQueue(Model.WorkQueue item, DateTime newScheduledTime, DateTime expireTime, string reasonText,
bool updateWorkQueueEntry, WorkQueueProcessorFailureType? errorType)
{
if (errorType!=null)
{
Platform.Log(LogLevel.Info, "Postpone {0} entry until {1}: {2}. [GUID={3}.] (This transaction is treated as a failure)",
item.WorkQueueTypeEnum, newScheduledTime, reasonText, item.GetKey());
item.FailureDescription = reasonText;
PostProcessingFailure(item, WorkQueueProcessorFailureType.NonFatal);
return;
}
Platform.Log(LogLevel.Info, "Postpone {0} entry until {1}: {2}. [GUID={3}]", item.WorkQueueTypeEnum, newScheduledTime, reasonText, item.GetKey());
using (IUpdateContext updateContext = PersistentStoreRegistry.GetDefaultStore().OpenUpdateContext(UpdateContextSyncMode.Flush))
{
IPostponeWorkQueue broker = updateContext.GetBroker<IPostponeWorkQueue>();
PostponeWorkQueueParameters parameters = new PostponeWorkQueueParameters
{
WorkQueueKey = item.Key,
Reason = reasonText,
ScheduledTime = newScheduledTime,
ExpirationTime = expireTime,
UpdateWorkQueue = updateWorkQueueEntry
};
if (broker.Execute(parameters) == false)
{
Platform.Log(LogLevel.Error, "Unable to reschedule {0} WorkQueue GUID: {1}", item.WorkQueueTypeEnum, item.GetKey().ToString());
}
else
{
updateContext.Commit();
}
}
}
示例6: ProcessItem
protected override void ProcessItem(Model.WorkQueue item)
{
Platform.CheckMemberIsSet(StorageLocation, "StorageLocation");
Platform.CheckForNullReference(Study, "Study doesn't exist");
if (WorkQueueUidList.Count == 0)
{
// we are done. Just need to cleanup the duplicate folder
Platform.Log(LogLevel.Info, "{0} is completed. Cleaning up duplicate storage folder. (GUID={1}, action={2})",
item.WorkQueueTypeEnum, item.GetKey().Key, _processDuplicateEntry.QueueData.Action);
CleanUpReconcileFolders();
PostProcessing(item, WorkQueueProcessorStatus.Complete, WorkQueueProcessorDatabaseUpdate.ResetQueueState);
}
else
{
Platform.Log(LogLevel.Info, "Processing {0} entry (GUID={1}, action={2})",
item.WorkQueueTypeEnum, item.GetKey().Key, _processDuplicateEntry.QueueData.Action);
Platform.CheckTrue(Directory.Exists(DuplicateFolder), String.Format("Duplicate Folder {0} doesn't exist.", DuplicateFolder));
LogWorkQueueInfo();
EnsureStorageLocationIsWritable(StorageLocation);
_currentStudyInfo = StudyInformation.CreateFrom(Study);
ImageSetDetails duplicateSopDetails = null;
// If deleting duplicates then don't log the history
if (_processDuplicateEntry.QueueData.Action != ProcessDuplicateAction.Delete && !HistoryLogged)
{
duplicateSopDetails = LoadDuplicateDetails();
}
try
{
UpdateStudyOrDuplicates();
int count = ProcessUidList();
// If deleting duplicates then don't log the history
if (_processDuplicateEntry.QueueData.Action != ProcessDuplicateAction.Delete &&
!HistoryLogged && duplicateSopDetails != null && count > 0)
{
LogHistory(duplicateSopDetails);
}
PostProcessing(item, WorkQueueProcessorStatus.Pending, WorkQueueProcessorDatabaseUpdate.None);
}
finally
{
UpdateQueueData();
}
}
}
示例7: CreateEditWorkQueueItemDetails
private static WorkQueueDetails CreateEditWorkQueueItemDetails(Model.WorkQueue item)
{
string studyPath;
try
{
StudyStorageLocation storage = WorkQueueController.GetLoadStorageLocation(item);
studyPath = storage.GetStudyPath();
}
catch(Exception)
{
studyPath = string.Empty;
}
var detail = new WorkQueueDetails
{
Key = item.Key,
ScheduledDateTime = item.ScheduledTime,
ExpirationTime = item.ExpirationTime,
InsertTime = item.InsertTime,
FailureCount = item.FailureCount,
Type = item.WorkQueueTypeEnum,
Status = item.WorkQueueStatusEnum,
Priority = item.WorkQueuePriorityEnum,
FailureDescription = item.FailureDescription,
ServerDescription = item.ProcessorID,
StorageLocationPath = studyPath
};
// Fetch UIDs
var wqUidsAdaptor = new WorkQueueUidAdaptor();
var uidCriteria = new WorkQueueUidSelectCriteria();
uidCriteria.WorkQueueKey.EqualTo(item.GetKey());
IList<WorkQueueUid> uids = wqUidsAdaptor.Get(uidCriteria);
var mapSeries = new Hashtable();
foreach (WorkQueueUid uid in uids)
{
if (mapSeries.ContainsKey(uid.SeriesInstanceUid) == false)
mapSeries.Add(uid.SeriesInstanceUid, uid.SopInstanceUid);
}
detail.NumInstancesPending = uids.Count;
detail.NumSeriesPending = mapSeries.Count;
// Fetch the study and patient info
var ssAdaptor = new StudyStorageAdaptor();
StudyStorage storages = ssAdaptor.Get(item.StudyStorageKey);
var studyAdaptor = new StudyAdaptor();
var studycriteria = new StudySelectCriteria();
studycriteria.StudyInstanceUid.EqualTo(storages.StudyInstanceUid);
studycriteria.ServerPartitionKey.EqualTo(item.ServerPartitionKey);
Study study = studyAdaptor.GetFirst(studycriteria);
// Study may not be available until the images are processed.
if (study != null)
{
var studyAssembler = new StudyDetailsAssembler();
detail.Study = studyAssembler.CreateStudyDetail(study);
}
var parser = new EditStudyWorkQueueDataParser();
EditStudyWorkQueueData data = parser.Parse(item.Data.DocumentElement);
detail.EditUpdateItems = data.EditRequest.UpdateEntries.ToArray();
return detail;
}
示例8: WorkQueueProcessorContext
public WorkQueueProcessorContext(Model.WorkQueue item)
:base(item.GetKey().Key.ToString())
{
_item = item;
}
示例9: AbortQueueItem
/// <summary>
/// Simple routine for abort (fail) a work queue item immediately.
/// </summary>
/// <param name="item">The item to fail.</param>
/// <param name="failureDescription">The reason for the failure.</param>
/// <param name="generateAlert"></param>
protected virtual void AbortQueueItem(Model.WorkQueue item, string failureDescription, bool generateAlert)
{
int retryCount = 0;
while (true)
{
try
{
int count = retryCount;
DBUpdateTime.Add(
delegate
{
#region Fail the WorkQueue entry
using (IUpdateContext updateContext = PersistentStoreRegistry.GetDefaultStore().OpenUpdateContext(UpdateContextSyncMode.Flush))
{
if (count>0)
Platform.Log(LogLevel.Error, "Abort {0} WorkQueue entry ({1}). Retry # {2}. Reason: {3}", item.WorkQueueTypeEnum, item.GetKey(), count, failureDescription);
else
Platform.Log(LogLevel.Error, "Abort {0} WorkQueue entry ({1}). Reason: {2}", item.WorkQueueTypeEnum, item.GetKey(), failureDescription);
IUpdateWorkQueue broker = updateContext.GetBroker<IUpdateWorkQueue>();
UpdateWorkQueueParameters parms = new UpdateWorkQueueParameters
{
ProcessorID = ServerPlatform.ProcessorId,
WorkQueueKey = item.GetKey(),
StudyStorageKey = item.StudyStorageKey,
FailureCount = item.FailureCount + 1,
FailureDescription = failureDescription,
WorkQueueStatusEnum = WorkQueueStatusEnum.Failed,
ScheduledTime = Platform.Time,
ExpirationTime = Platform.Time.AddDays(1)
};
if (false == broker.Execute(parms))
{
Platform.Log(LogLevel.Error, "Unable to update {0} WorkQueue GUID: {1}", item.WorkQueueTypeEnum, item.GetKey().ToString());
}
else
{
updateContext.Commit();
}
}
#endregion
});
break; // done
}
catch (Exception ex)
{
if (ex is PersistenceException || ex is SqlException)
{
if (retryCount > MAX_DB_RETRY)
{
Platform.Log(LogLevel.Error, ex, "Error occurred when calling AbortQueueItem. Max db retry count has been reached.");
throw;
}
Platform.Log(LogLevel.Error, ex, "Error occurred when calling AbortQueueItem. Retry later. GUID={0}", item.Key);
SleepForRetry();
// Service is stoping
if (CancelPending)
{
Platform.Log(LogLevel.Warn, "Stop is requested. Attempt to abort WorkQueue entry is now terminated.");
break;
}
retryCount++;
}
else
throw;
}
}
}
示例10: UpdateState
/// <summary>
/// Updates the 'State' of the filesystem associated with the 'FilesystemDelete' <see cref="ServiceLock"/> item
/// </summary>
/// <param name="item"></param>
/// <param name="fs"></param>
private static void UpdateState(Model.ServiceLock item, ServerFilesystemInfo fs)
{
FilesystemState state = null;
if (item.State != null && item.State.DocumentElement!=null)
{
//load from datatabase
state = XmlUtils.Deserialize<FilesystemState>(item.State.DocumentElement);
}
if (state == null)
state = new FilesystemState();
if (fs.AboveHighWatermark)
{
// we don't want to generate alert if the filesystem is offline or not accessible.
if (fs.Online && (fs.Readable || fs.Writeable))
{
TimeSpan ALERT_INTERVAL = TimeSpan.FromMinutes(ServiceLockSettings.Default.HighWatermarkAlertInterval);
if (state.AboveHighWatermarkTimestamp == null)
state.AboveHighWatermarkTimestamp = Platform.Time;
TimeSpan elapse = (state.LastHighWatermarkAlertTimestamp != null) ? Platform.Time - state.LastHighWatermarkAlertTimestamp.Value : Platform.Time - state.AboveHighWatermarkTimestamp.Value;
if (elapse.Duration() >= ALERT_INTERVAL)
{
ServerPlatform.Alert(AlertCategory.System, AlertLevel.Warning, "Filesystem",
AlertTypeCodes.LowResources, null, TimeSpan.Zero,
SR.AlertFilesystemAboveHW,
fs.Filesystem.Description,
TimeSpanFormatter.Format(Platform.Time - state.AboveHighWatermarkTimestamp.Value, true));
state.LastHighWatermarkAlertTimestamp = Platform.Time;
}
}
else
{
state.AboveHighWatermarkTimestamp = null;
state.LastHighWatermarkAlertTimestamp = null;
}
}
else
{
state.AboveHighWatermarkTimestamp = null;
state.LastHighWatermarkAlertTimestamp = null;
}
XmlDocument stateXml = new XmlDocument();
stateXml.AppendChild(stateXml.ImportNode(XmlUtils.Serialize(state), true));
IPersistentStore store = PersistentStoreRegistry.GetDefaultStore();
using (IUpdateContext ctx = store.OpenUpdateContext(UpdateContextSyncMode.Flush))
{
ServiceLockUpdateColumns columns = new ServiceLockUpdateColumns();
columns.State = stateXml;
IServiceLockEntityBroker broker = ctx.GetBroker<IServiceLockEntityBroker>();
broker.Update(item.GetKey(), columns);
ctx.Commit();
}
}
示例11: UnlockServiceLock
/// <summary>
/// Set a <see cref="ServiceLock"/> entry to pending.
/// </summary>
/// <param name="item">The <see cref="ServiceLock"/> entry to set.</param>
/// <param name="scheduledTime"></param>
/// <param name="enabled">Bool telling if the ServiceLock entry should be enabled after unlock.</param>
protected static void UnlockServiceLock(Model.ServiceLock item, bool enabled, DateTime scheduledTime)
{
using (IUpdateContext updateContext = PersistentStoreRegistry.GetDefaultStore().OpenUpdateContext(UpdateContextSyncMode.Flush))
{
// Update the WorkQueue item status and times.
IUpdateServiceLock update = updateContext.GetBroker<IUpdateServiceLock>();
ServiceLockUpdateParameters parms = new ServiceLockUpdateParameters
{
ServiceLockKey = item.GetKey(),
Lock = false,
ScheduledTime = scheduledTime,
ProcessorId = item.ProcessorId,
Enabled = enabled
};
if (false == update.Execute(parms))
{
Platform.Log(LogLevel.Error, "Unable to update StudyLock GUID Status: {0}",
item.GetKey().ToString());
}
updateContext.Commit();
}
}
示例12: ProcessItem
protected override void ProcessItem(Model.WorkQueue item)
{
LoadUids(item);
if (WorkQueueUidList.Count == 0)
{
// No UIDs associated with the WorkQueue item. Set the status back to idle
PostProcessing(item,
WorkQueueProcessorStatus.Idle,
WorkQueueProcessorDatabaseUpdate.ResetQueueState);
return;
}
XmlElement element = item.Data.DocumentElement;
string syntax = element.Attributes["syntax"].Value;
TransferSyntax compressSyntax = TransferSyntax.GetTransferSyntax(syntax);
if (compressSyntax == null)
{
item.FailureDescription =
String.Format("Invalid transfer syntax in compression WorkQueue item: {0}", element.Attributes["syntax"].Value);
Platform.Log(LogLevel.Error, "Error with work queue item {0}: {1}", item.GetKey(), item.FailureDescription);
base.PostProcessingFailure(item, WorkQueueProcessorFailureType.Fatal);
return;
}
if (Study == null)
{
item.FailureDescription =
String.Format("Compression item does not have a linked Study record");
Platform.Log(LogLevel.Error, "Error with work queue item {0}: {1}", item.GetKey(), item.FailureDescription);
base.PostProcessingFailure(item, WorkQueueProcessorFailureType.Fatal);
return;
}
Platform.Log(LogLevel.Info,
"Compressing study {0} for Patient {1} (PatientId:{2} A#:{3}) on partition {4} to {5}",
Study.StudyInstanceUid, Study.PatientsName, Study.PatientId,
Study.AccessionNumber, ServerPartition.Description, compressSyntax.Name);
IDicomCodecFactory[] codecs = DicomCodecRegistry.GetCodecFactories();
IDicomCodecFactory theCodecFactory = null;
foreach (IDicomCodecFactory codec in codecs)
if (codec.CodecTransferSyntax.Equals(compressSyntax))
{
theCodecFactory = codec;
break;
}
if (theCodecFactory == null)
{
item.FailureDescription = String.Format("Unable to find codec for compression: {0}", compressSyntax.Name);
Platform.Log(LogLevel.Error, "Error with work queue item {0}: {1}", item.GetKey(), item.FailureDescription);
base.PostProcessingFailure(item, WorkQueueProcessorFailureType.Fatal);
return;
}
if (!ProcessUidList(item, theCodecFactory))
PostProcessingFailure(item, WorkQueueProcessorFailureType.NonFatal);
else
{
Platform.Log(LogLevel.Info,
"Completed Compressing study {0} for Patient {1} (PatientId:{2} A#:{3}) on partition {4} to {5}",
Study.StudyInstanceUid, Study.PatientsName, Study.PatientId,
Study.AccessionNumber, ServerPartition.Description, compressSyntax.Name);
if (compressSyntax.LossyCompressed)
UpdateStudyStatus(StorageLocation, StudyStatusEnum.OnlineLossy, compressSyntax);
else
UpdateStudyStatus(StorageLocation, StudyStatusEnum.OnlineLossless, compressSyntax);
PostProcessing(item,
WorkQueueProcessorStatus.Pending,
WorkQueueProcessorDatabaseUpdate.None); // batch processed, not complete
}
}
示例13: ServiceLockProcessorContext
/// <summary>
/// Creates an instance of <see cref="ServiceLockProcessorContext"/>
/// </summary>
/// <param name="item"></param>
public ServiceLockProcessorContext(Model.ServiceLock item)
:base(item.GetKey().Key.ToString())
{
Platform.CheckForNullReference(item, "item");
_item = item;
}
示例14: FailQueueItem
/// <summary>
/// Simple routine for failing a work queue item.
/// </summary>
/// <param name="item">The item to fail.</param>
/// <param name="failureDescription">The reason for the failure.</param>
private void FailQueueItem(Model.WorkQueue item, string failureDescription)
{
// Must retry to reset the status of the entry in case of db error
// Failure to do so will create stale work queue entry (stuck in "In Progress" state)
// which can only be recovered by restarting the service.
while(true)
{
try
{
WorkQueueTypeProperties prop = _propertiesDictionary[item.WorkQueueTypeEnum];
using (IUpdateContext updateContext = _store.OpenUpdateContext(UpdateContextSyncMode.Flush))
{
IUpdateWorkQueue update = updateContext.GetBroker<IUpdateWorkQueue>();
UpdateWorkQueueParameters parms = new UpdateWorkQueueParameters
{
ProcessorID = ServerPlatform.ProcessorId,
WorkQueueKey = item.GetKey(),
StudyStorageKey = item.StudyStorageKey,
FailureCount = item.FailureCount + 1,
FailureDescription = failureDescription
};
var settings = WorkQueueSettings.Instance;
if ((item.FailureCount + 1) > prop.MaxFailureCount)
{
Platform.Log(LogLevel.Error,
"Failing {0} WorkQueue entry ({1}), reached max retry count of {2}. Failure Reason: {3}",
item.WorkQueueTypeEnum, item.GetKey(), item.FailureCount + 1, failureDescription);
parms.WorkQueueStatusEnum = WorkQueueStatusEnum.Failed;
parms.ScheduledTime = Platform.Time;
parms.ExpirationTime = Platform.Time.AddDays(1);
OnWorkQueueEntryFailed(item, failureDescription);
}
else
{
Platform.Log(LogLevel.Error,
"Resetting {0} WorkQueue entry ({1}) to Pending, current retry count {2}. Failure Reason: {3}",
item.WorkQueueTypeEnum, item.GetKey(), item.FailureCount + 1, failureDescription);
parms.WorkQueueStatusEnum = WorkQueueStatusEnum.Pending;
parms.ScheduledTime = Platform.Time.AddMilliseconds(settings.WorkQueueQueryDelay);
parms.ExpirationTime =
Platform.Time.AddSeconds((prop.MaxFailureCount - item.FailureCount) *
prop.FailureDelaySeconds);
}
if (false == update.Execute(parms))
{
Platform.Log(LogLevel.Error, "Unable to update {0} WorkQueue GUID: {1}", item.WorkQueueTypeEnum,
item.GetKey().ToString());
}
else
{
updateContext.Commit();
break; // done
}
}
}
catch(Exception ex)
{
Platform.Log(LogLevel.Error, "Error occurred when calling FailQueueItem. Retry later. {0}", ex.Message);
_terminateEvent.WaitOne(2000, false);
if (_stop)
{
Platform.Log(LogLevel.Warn, "Service is stopping. Retry to fail the entry is terminated.");
break;
}
}
}
}
示例15: ExecuteProcessor
/// <summary>
/// The actual delegate
/// </summary>
/// <param name="processor"></param>
/// <param name="queueItem"></param>
private void ExecuteProcessor(IWorkQueueItemProcessor processor, Model.WorkQueue queueItem)
{
try
{
processor.Process(queueItem);
}
catch (Exception e)
{
Platform.Log(LogLevel.Error, e,
"Unexpected exception when processing WorkQueue item of type {0}. Failing Queue item. (GUID: {1})",
queueItem.WorkQueueTypeEnum,
queueItem.GetKey());
String error = e.InnerException != null ? e.InnerException.Message : e.Message;
FailQueueItem(queueItem, error);
}
finally
{
// Signal the parent thread, so it can query again
_threadStop.Set();
// Cleanup the processor
processor.Dispose();
}
}