|
|
@@ -7,28 +7,28 @@ namespace MQTTnet.Core.Internal |
|
|
|
{ |
|
|
|
public static class TaskExtensions |
|
|
|
{ |
|
|
|
public static async Task TimeoutAfter( this Task task, TimeSpan timeout ) |
|
|
|
public static async Task TimeoutAfter(this Task task, TimeSpan timeout) |
|
|
|
{ |
|
|
|
using ( var cancellationTokenSource = new CancellationTokenSource() ) |
|
|
|
using (var cancellationTokenSource = new CancellationTokenSource()) |
|
|
|
{ |
|
|
|
try |
|
|
|
{ |
|
|
|
var timeoutTask = Task.Delay(timeout, cancellationTokenSource.Token); |
|
|
|
var finishedTask = await Task.WhenAny(timeoutTask, task).ConfigureAwait(false); |
|
|
|
|
|
|
|
if ( finishedTask == timeoutTask ) |
|
|
|
if (finishedTask == timeoutTask) |
|
|
|
{ |
|
|
|
throw new MqttCommunicationTimedOutException(); |
|
|
|
} |
|
|
|
|
|
|
|
if ( task.IsCanceled ) |
|
|
|
if (task.IsCanceled) |
|
|
|
{ |
|
|
|
throw new TaskCanceledException(); |
|
|
|
} |
|
|
|
|
|
|
|
if ( task.IsFaulted ) |
|
|
|
if (task.IsFaulted) |
|
|
|
{ |
|
|
|
throw new MqttCommunicationException( task.Exception.GetBaseException() ); |
|
|
|
throw new MqttCommunicationException(task.Exception.GetBaseException()); |
|
|
|
} |
|
|
|
} |
|
|
|
finally |
|
|
@@ -38,28 +38,28 @@ namespace MQTTnet.Core.Internal |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public static async Task<TResult> TimeoutAfter<TResult>( this Task<TResult> task, TimeSpan timeout ) |
|
|
|
public static async Task<TResult> TimeoutAfter<TResult>(this Task<TResult> task, TimeSpan timeout) |
|
|
|
{ |
|
|
|
using ( var cancellationTokenSource = new CancellationTokenSource() ) |
|
|
|
using (var cancellationTokenSource = new CancellationTokenSource()) |
|
|
|
{ |
|
|
|
try |
|
|
|
{ |
|
|
|
var timeoutTask = Task.Delay(timeout, cancellationTokenSource.Token); |
|
|
|
var finishedTask = await Task.WhenAny(timeoutTask, task).ConfigureAwait(false); |
|
|
|
|
|
|
|
if ( finishedTask == timeoutTask ) |
|
|
|
if (finishedTask == timeoutTask) |
|
|
|
{ |
|
|
|
throw new MqttCommunicationTimedOutException(); |
|
|
|
} |
|
|
|
|
|
|
|
if ( task.IsCanceled ) |
|
|
|
if (task.IsCanceled) |
|
|
|
{ |
|
|
|
throw new TaskCanceledException(); |
|
|
|
} |
|
|
|
|
|
|
|
if ( task.IsFaulted ) |
|
|
|
if (task.IsFaulted) |
|
|
|
{ |
|
|
|
throw new MqttCommunicationException( task.Exception.GetBaseException() ); |
|
|
|
throw new MqttCommunicationException(task.Exception.GetBaseException()); |
|
|
|
} |
|
|
|
|
|
|
|
return task.Result; |
|
|
|