/// <summary> /// Launches the service as a Task on it's own thread /// Creates new Dependancy Injection instance for each thread/Task /// </summary> /// <param name="TaskPayloadHiServiceIHISearch"></param> public void Launch(ITaskPayloadHiServiceIHISearch TaskPayloadHiServiceIHISearch) { ConsoleSupport.TimeStampWriteLine(LogMessageSupport.TaskReceived(TaskPayloadHiServiceIHISearch)); Task.Factory.StartNew(() => { try { using (AsyncScopedLifestyle.BeginScope(Container)) { this.Container.GetInstance<IIhiSearchService>().Run(TaskPayloadHiServiceIHISearch); } } catch (Exception Exec) { Pyro.Common.Logging.Logger.Log.Error(Exec, "IhiSearchServiceTaskLauncher threw uncaught exception in Task/Thread."); } }); }
public void Run(ITaskPayloadHiServiceIHISearch TaskPayloadHiServiceIHISearch) { using (DbContextTransaction Transaction = IUnitOfWork.BeginTransaction()) { try { IRequestMeta RequestMeta = IRequestMetaFactory.CreateRequestMeta().Set("Patient/IHIStatusExample"); IResourceServiceOutcome ResourceServiceOutcome = IResourceApiServices.GetRead("IHIStatusExample", RequestMeta); ResourceServiceOutcome.SummaryType = RequestMeta.SearchParameterGeneric.SummaryType; Transaction.Commit(); ConsoleSupport.TimeStampWriteLine(LogMessageSupport.TaskOutCome(TaskPayloadHiServiceIHISearch, Hl7.Fhir.Model.Task.TaskStatus.Completed)); } catch (Exception Exec) { Transaction.Rollback(); ConsoleSupport.TimeStampWriteLine(LogMessageSupport.TaskException(TaskPayloadHiServiceIHISearch, Hl7.Fhir.Model.Task.TaskStatus.Failed)); ILog.Error(Exec, $"FHIR Task ID: {TaskPayloadHiServiceIHISearch.TaskId}, FHIR Patient ID: {TaskPayloadHiServiceIHISearch.PatientId}"); } } }
public void HiServiceResolveIHI(ITaskPayloadHiServiceIHISearch Payload) { IClientProxy proxy = Clients.All; proxy.Invoke(Payload.TaskType.GetPyroLiteral(), Payload); }