mirror of
https://github.com/sshnet/SSH.NET.git
synced 2026-09-10 17:25:51 +00:00
Added EndInvoke(TimeSpan timeout).
This commit is contained in:
@@ -29,10 +29,12 @@ namespace Renci.SshNet.Common
|
||||
private Exception _exception;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether EndInvoke has been called on the current AsyncResult.
|
||||
/// Gets or sets a value indicating whether <see cref="EndInvoke()"/> has been called on the current
|
||||
/// <see cref="AsyncResult"/>.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// <c>true</c> if <see cref="EndInvoke()"/> has been called on the current <see cref="AsyncResult"/>; otherwise, <c>false</c>.
|
||||
/// <c>true</c> if <see cref="EndInvoke()"/> has been called on the current <see cref="AsyncResult"/>;
|
||||
/// otherwise, <c>false</c>.
|
||||
/// </value>
|
||||
public bool EndInvokeCalled { get; private set; }
|
||||
|
||||
@@ -75,15 +77,24 @@ namespace Renci.SshNet.Common
|
||||
/// <summary>
|
||||
/// Waits until the asynchronous operation completes, and then returns.
|
||||
/// </summary>
|
||||
public void EndInvoke()
|
||||
internal void EndInvoke()
|
||||
{
|
||||
EndInvoke(Session.InfiniteTimeSpan);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Waits until the asynchronous operation completes, and then returns.
|
||||
/// </summary>
|
||||
internal void EndInvoke(TimeSpan timeout)
|
||||
{
|
||||
// This method assumes that only 1 thread calls EndInvoke for this object
|
||||
if (!IsCompleted)
|
||||
{
|
||||
// If the operation isn't done, wait for it
|
||||
AsyncWaitHandle.WaitOne();
|
||||
AsyncWaitHandle.Dispose();
|
||||
var completed = AsyncWaitHandle.WaitOne(timeout);
|
||||
_asyncWaitHandle = null; // Allow early GC
|
||||
AsyncWaitHandle.Dispose();
|
||||
|
||||
}
|
||||
|
||||
EndInvokeCalled = true;
|
||||
|
||||
Reference in New Issue
Block a user