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...