Creating threads in .NET
Creating a raw thread is something that mostly makes sense only when you have a long-running operation that depends on the CPU alone. As an example, let's say we want to compute prime numbers, without really caring about the possible optimizations:
public class Primes : IEnumerable<long>
{
public Primes(long Max = long.MaxValue)
{
this.Max = Max;
}
public long Max { get; private set; }
IEnumerator IEnumerable.GetEnumerator() => ((IEnumerable<long>)this).GetEnumerator();
public IEnumerator<long> GetEnumerator()
{
yield return 1;
bool bFlag;
long start = 2;
while (start < Max)
{
bFlag = false;
var number = start;
for (int i = 2; i < number; i++)
{
if (number % i == 0)
{
bFlag = true;
break;
}
}
if (!bFlag)
{
yield return number;
}
start++;
}
}
}
The Primes class implements IEnumerable<long> so that we can easily enumerate the prime numbers in...