-
Notifications
You must be signed in to change notification settings - Fork 0
/
RandomGenerator.cs
43 lines (39 loc) · 1.32 KB
/
RandomGenerator.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using System;
using System.Threading;
using System.Threading.Tasks;
namespace TaskCancellation
{
internal class RandomGenerator
{
public string Name {get; set;}
public int BaseNumber {get; set;} = 23;
public int MaxNumber { get; set; } = 1000;
public int DelayMSecond { get; set; } = 2000;
public int TryCount { get; set; } = 10;
public RandomGenerator() {
Name = Guid.NewGuid().ToString();
}
public RandomGenerator(string name) {
Name = name;
}
public Task CreateTask(CancellationToken token)
{
return Task.Run(()=> {
var random = new Random();
int cnt = 0;
while (true) {
token.ThrowIfCancellationRequested();
if (++cnt > TryCount)
throw new TimeoutException("Task time out.");
var anInteger = random.Next(1, MaxNumber);
Console.WriteLine($"Generator {Name}: {anInteger}");
if (anInteger % BaseNumber == 0) {
Console.WriteLine($"{Name} generator done.");
break;
}
Thread.Sleep(DelayMSecond);
}
}, token);
}
}
}