Mar*_*nom 0 .net c# multithreading task
因此,我试图找出一种取消特定任务的方法。在示例中,我想取消它产生的3个任务中的2个
static async Task Main(string[] args)
{
var tasks = Enumerable.Range(0, 3).Select(x => Task.Run(() =>
{
Counter();
}));
await Task.WhenAll(tasks);
Console.ReadLine();
}
public static void Counter()
{
while (true)
{
for (int i = 0; i < 1000; i++)
{
Console.WriteLine(i);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我要while (someProperty)更改someProperty为,false则所有线程都将停止。我想停止2/3,该怎么做?
CancellationToken如果要单独取消它们,则需要为每个开始的任务传递:
static async Task Main(string[] args)
{
var cancellationSources = Enumerable.Range(0, 3)
.Select(_ => new CancellationTokenSource())
.ToList();
var tasks = Enumerable.Range(0, 3).Select(x => Task.Run(
() => Counter(cancellationSources[x].Token),
cancellationSources[x].Token
));
cancellationSources[1].Cancel();
await Task.WhenAll(tasks);
Console.ReadLine();
}
public static void Counter(CancellationToken cancellationToken)
{
while (!cancellationToken.IsCancellationRequested)
{
// or while(true) and token.ThrowIfCancellationRequested(); to throw instead
for (int i = 0; i < 1000; i++)
{
Console.WriteLine(i);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32 次 |
| 最近记录: |