Browse Source

Refactoring

release/3.x.x
Christian Kratky 7 years ago
parent
commit
dcf6f94d77
4 changed files with 20 additions and 18 deletions
  1. +2
    -0
      .gitignore
  2. +12
    -12
      MQTTnet.Core/Internal/TaskExtensions.cs
  3. +1
    -1
      MQTTnet.Core/MQTTnet.Core.csproj
  4. +5
    -5
      Tests/MQTTnet.Core.Tests/ExtensionTests.cs

+ 2
- 0
.gitignore View File

@@ -286,4 +286,6 @@ __pycache__/
*.btm.cs
*.odx.cs
*.xsd.cs


Build/nuget.exe

+ 12
- 12
MQTTnet.Core/Internal/TaskExtensions.cs View File

@@ -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;


+ 1
- 1
MQTTnet.Core/MQTTnet.Core.csproj View File

@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netstandard1.3</TargetFramework>
<TargetFramework>netstandard1.1</TargetFramework>
<AssemblyName>MQTTnet.Core</AssemblyName>
<RootNamespace>MQTTnet.Core</RootNamespace>
<GeneratePackageOnBuild>False</GeneratePackageOnBuild>


+ 5
- 5
Tests/MQTTnet.Core.Tests/ExtensionTests.cs View File

@@ -75,15 +75,15 @@ namespace MQTTnet.Core.Tests
var tasks = Enumerable.Range(0, 100000)
.Select(i => Task.Delay(TimeSpan.FromMilliseconds(1)).TimeoutAfter(TimeSpan.FromMinutes(1)));

await Task.WhenAll( tasks );
AssertIsLess( 3_000_000, GC.GetTotalMemory( true ) );
await Task.WhenAll(tasks);
AssertIsLess(3_000_000, GC.GetTotalMemory(true));
}

private void AssertIsLess( long bound, long actual )
private static void AssertIsLess(long bound, long actual)
{
if ( bound < actual )
if (bound < actual)
{
Assert.Fail( $"value must be less than {bound:N0} but is {actual:N0}" );
Assert.Fail($"value must be less than {bound:N0} but is {actual:N0}");
}
}
}


Loading…
Cancel
Save