private void ExecuteOperation(ThreadTerminator currentTerminator) { lock (sync) { MoneyConverterClient wcfClient = new MoneyConverterClient(); try { wcfClient.Open(); method.Invoke(wcfClient); wcfClient.Close(); currentTerminator.ThrowIfCancellationRequested(); } catch (TimeoutException timeout) { JobState.Invoke(jobTimeout); wcfClient.Abort(); } catch (CommunicationException commException) { JobState.Invoke(jobCommunicationException); wcfClient.Abort(); } } }
private void DoWork(object currentTerminator) { ThreadTerminator localTerminator = (ThreadTerminator)currentTerminator; try { // while (true) { localTerminator.ThrowIfCancellationRequested(); try { ExecuteOperation(localTerminator); } finally { /* any required cleanup */ JobState.Invoke(jobComplete); } } } catch (OperationCanceledException) { // write log that operation // execution have been canceled JobState.Invoke(jobCanceled); } }