- 아래는 Parallel.For()를 사용할 때 ParallelOptions와 CancellationToken을 함께 사용하는 예시 코드입니다.
using System;
using System.Threading;
using System.Threading.Tasks;
class Program
{
static void Main()
{
// CancellationTokenSource를 생성하여 CancellationToken을 만듭니다.
var cancellationTokenSource = new CancellationTokenSource();
var cancellationToken = cancellationTokenSource.Token;
// ParallelOptions를 생성하고 CancellationToken을 설정합니다.
var parallelOptions = new ParallelOptions
{
CancellationToken = cancellationToken
};
Console.WriteLine("Press any key to cancel...");
Console.ReadKey();
// 작업을 취소하기 위해 CancellationTokenSource에 취소 요청을 보냅니다.
cancellationTokenSource.Cancel();
try
{
Parallel.For(0, 10, parallelOptions, i =>
{
// 작업이 진행되는 동안 작업 취소 요청을 확인합니다.
parallelOptions.CancellationToken.ThrowIfCancellationRequested();
// 작업 내용
Console.WriteLine($"Iteration {i} started");
Thread.Sleep(1000);
Console.WriteLine($"Iteration {i} completed");
});
}
catch (OperationCanceledException)
{
Console.WriteLine("Operation was cancelled.");
}
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
- 이 코드는 Parallel.For()를 사용하여 0부터 9까지의 반복 작업을 수행합니다.
- ParallelOptions를 생성하고 CancellationToken을 설정하여 작업 취소를 관리합니다.
- Console.ReadKey()를 통해 언제든지 작업을 취소할 수 있습니다.
- cancellationTokenSource.Cancel()을 호출하여 작업을 취소합니다.
- Parallel.For() 블록 내에서 parallelOptions.CancellationToken.ThrowIfCancellationRequested()를 사용하여 작업이 진행되는 동안 작업 취소 요청을 확인하고 예외를 throw할 수 있습니다.
- 작업이 취소되면 OperationCanceledException이 throw되고 해당 예외를 catch하여 작업이 취소되었음을 알 수 있습니다.