Skip to content

Commit a06eb06

Browse files
committed
- cancellation token source
1 parent 4643fcc commit a06eb06

6 files changed

Lines changed: 101 additions & 4 deletions

File tree

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Threading;
5+
using System.Threading.Tasks;
6+
using NUnit.Framework;
7+
8+
namespace Shuttle.Core.Threading.Tests
9+
{
10+
[TestFixture]
11+
public class SharedCancellationTokenSourceFixture
12+
{
13+
private static readonly Random Random = new Random(DateTime.Now.Millisecond);
14+
15+
[Test]
16+
public void Should_be_able_to_shared_cancellation_token_source_entries()
17+
{
18+
using (var cancellationTokenSource = new DefaultCancellationTokenSource())
19+
{
20+
Assert.That(cancellationTokenSource.Get(), Is.SameAs(cancellationTokenSource.Get()));
21+
22+
var tasks = new List<Task>
23+
{
24+
Task.Run(() => Spin("A", cancellationTokenSource.Get().Token)),
25+
Task.Run(() => Spin("B", cancellationTokenSource.Get().Token)),
26+
Task.Run(() => Spin("C", cancellationTokenSource.Get().Token)),
27+
Task.Run(() => Spin("D", cancellationTokenSource.Get().Token))
28+
};
29+
30+
// wait for all the tasks to start
31+
while (tasks.Any(task => task.Status != TaskStatus.Running))
32+
{
33+
Thread.Sleep(100);
34+
}
35+
36+
cancellationTokenSource.Get().Cancel();
37+
38+
Task.WaitAll(tasks.ToArray());
39+
}
40+
}
41+
42+
private void Spin(string name, CancellationToken cancellationToken)
43+
{
44+
Log($@"[starting] : {name}");
45+
46+
while (!cancellationToken.IsCancellationRequested)
47+
{
48+
var timeout = Random.Next(5, 20) * 100;
49+
50+
Log($@"[sleeping] : {name} / timeout = {timeout}");
51+
52+
Thread.Sleep(timeout);
53+
}
54+
55+
Log($@"[ending] : {name}");
56+
}
57+
58+
private void Log(string message)
59+
{
60+
Console.WriteLine($@"{DateTime.Now:O} - {message}");
61+
}
62+
}
63+
}

Shuttle.Core.Threading/.package/package.nuspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<package>
44
<metadata>
55
<id>Shuttle.Core.Threading</id>
6-
<version>11.0.2</version>
6+
<version>11.1.1</version>
77
<authors>Eben Roux</authors>
88
<owners>Eben Roux</owners>
99
<license type="expression">BSD-3-Clause</license>
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
using System;
2+
using System.Threading;
3+
4+
namespace Shuttle.Core.Threading
5+
{
6+
public class DefaultCancellationTokenSource : ICancellationTokenSource, IDisposable
7+
{
8+
private CancellationTokenSource _cancellationTokenSource = new CancellationTokenSource();
9+
10+
public CancellationTokenSource Get()
11+
{
12+
return _cancellationTokenSource;
13+
}
14+
15+
public void Renew()
16+
{
17+
_cancellationTokenSource.Cancel();
18+
_cancellationTokenSource = new CancellationTokenSource();
19+
}
20+
21+
public void Dispose()
22+
{
23+
_cancellationTokenSource.Cancel();
24+
}
25+
}
26+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
namespace Shuttle.Core.Threading
2+
{
3+
public interface ICancellationTokenSource
4+
{
5+
System.Threading.CancellationTokenSource Get();
6+
void Renew();
7+
}
8+
}

Shuttle.Core.Threading/ProcessorThread.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class ProcessorThread
1515
private readonly ILog _log;
1616
private readonly string _name;
1717
private readonly IProcessor _processor;
18-
private readonly CancellationTokenSource _cancellationTokenSource = new CancellationTokenSource();
18+
private readonly System.Threading.CancellationTokenSource _cancellationTokenSource = new System.Threading.CancellationTokenSource();
1919

2020
private bool _started;
2121

Shuttle.Core.Threading/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313
[assembly: AssemblyTitle(".NET Standard")]
1414
#endif
1515

16-
[assembly: AssemblyVersion("11.0.2.0")]
16+
[assembly: AssemblyVersion("11.1.1.0")]
1717
[assembly: AssemblyCopyright("Copyright (c) 2021, Eben Roux")]
1818
[assembly: AssemblyProduct("Shuttle.Core.Threading")]
1919
[assembly: AssemblyCompany("Eben Roux")]
2020
[assembly: AssemblyConfiguration("Release")]
21-
[assembly: AssemblyInformationalVersion("11.0.2")]
21+
[assembly: AssemblyInformationalVersion("11.1.1")]
2222
[assembly: ComVisible(false)]

0 commit comments

Comments
 (0)