本文整理汇总了C#中System.Threading.Semaphore.?.Close方法的典型用法代码示例。如果您正苦于以下问题:C# Semaphore.?.Close方法的具体用法?C# Semaphore.?.Close怎么用?C# Semaphore.?.Close使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.Threading.Semaphore
的用法示例。
在下文中一共展示了Semaphore.?.Close方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: TryStartProcess
private RemoteService TryStartProcess(CancellationToken cancellationToken)
{
Process newProcess = null;
int newProcessId = -1;
Semaphore semaphore = null;
try
{
string semaphoreName;
while (true)
{
semaphoreName = "HostSemaphore-" + Guid.NewGuid();
bool semaphoreCreated;
semaphore = new Semaphore(0, 1, semaphoreName, out semaphoreCreated);
if (semaphoreCreated)
{
break;
}
semaphore.Close();
cancellationToken.ThrowIfCancellationRequested();
}
var remoteServerPort = "HostChannel-" + Guid.NewGuid();
var processInfo = new ProcessStartInfo(HostPath)
{
Arguments = remoteServerPort + " " + semaphoreName,
WorkingDirectory = _initialWorkingDirectory,
CreateNoWindow = true,
UseShellExecute = false
};
newProcess = new Process { StartInfo = processInfo };
newProcess.Start();
cancellationToken.ThrowIfCancellationRequested();
try
{
newProcessId = newProcess.Id;
_childProcessManager.AddProcess(newProcess);
}
catch
{
newProcessId = 0;
}
// sync:
while (!semaphore.WaitOne(MillisecondsTimeout))
{
if (!newProcess.IsAlive())
{
return null;
}
cancellationToken.ThrowIfCancellationRequested();
}
// instantiate remote service:
Service newService;
try
{
newService = (Service)Activator.GetObject(
typeof(Service),
"ipc://" + remoteServerPort + "/" + nameof(Service));
cancellationToken.ThrowIfCancellationRequested();
newService.Initialize(_references.ToArray(), _imports.ToArray(), _nuGetProvider, _initialWorkingDirectory, OnDumped, OnExecutionCompleted);
}
catch (RemotingException) when (!newProcess.IsAlive())
{
return null;
}
return new RemoteService(newProcess, newProcessId, newService);
}
catch (OperationCanceledException)
{
if (newProcess != null)
{
RemoteService.InitiateTermination(newProcess, newProcessId);
}
return null;
}
finally
{
semaphore?.Close();
}
}