private async Task WaitUntilErrorAndOutputEof(bool cancel, TaskUtilities.SemaphoreReleaser semaphoreReleaser) { Contract.Requires(semaphoreReleaser.IsValid && semaphoreReleaser.CurrentCount == 0); if (m_outputReader != null) { if (!m_killed && !cancel) { await m_outputReader.WaitUntilEofAsync(); } m_outputReader.Dispose(); m_outputReader = null; } if (m_errorReader != null) { if (!m_killed && !cancel) { await m_errorReader.WaitUntilEofAsync(); } m_errorReader.Dispose(); m_errorReader = null; } InternalCloseStandardInput(semaphoreReleaser); }
private void InternalCloseStandardInput(TaskUtilities.SemaphoreReleaser semaphoreReleaser) { Contract.Requires(semaphoreReleaser.IsValid && semaphoreReleaser.CurrentCount == 0); Analysis.IgnoreArgument(semaphoreReleaser); if (m_standardInputWriter != null) { m_standardInputWriter.Dispose(); m_standardInputWriter = null; } }
private void StopWaiting(TaskUtilities.SemaphoreReleaser semaphoreReleaser) { Contract.Requires(semaphoreReleaser.IsValid && semaphoreReleaser.CurrentCount == 0); Analysis.IgnoreArgument(semaphoreReleaser); if (m_waiting) { m_waiting = false; m_registeredWaitHandle.Unregister(null); m_processWaitHandle.Dispose(); m_processWaitHandle = null; m_registeredWaitHandle = null; } }