C# 如何取消任务类型集合中的特定任务
因此,我试图找出一种方法来取消特定的任务。 在这个例子中,我想取消它产生的3个任务中的2个C# 如何取消任务类型集合中的特定任务,c#,.net,multithreading,task,C#,.net,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()
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);
}
}
}
static async Task Main(字符串[]args)
{
var tasks=Enumerable.Range(0,3)。选择(x=>Task.Run(()=>
{
计数器();
}));
等待任务。何时(任务);
Console.ReadLine();
}
公共静态无效计数器()
{
while(true)
{
对于(int i=0;i<1000;i++)
{
控制台写入线(i);
}
}
}
如果我执行
while(someProperty)
并将someProperty
更改为false
,那么所有线程都会停止。我想停止2/3,我该怎么做?如果您想单独取消启动的每个任务,您需要为其传递一个取消令牌:
static async Task Main(字符串[]args)
{
var cancellationSources=Enumerable.Range(0,3)
.Select(=>new CancellationTokenSource())
.ToList();
var tasks=Enumerable.Range(0,3)。选择(x=>Task.Run(
()=>计数器(cancellationSources[x].令牌),
cancellationSources[x]。令牌
));
cancellationSources[1]。取消();
等待任务。何时(任务);
Console.ReadLine();
}
公共静态无效计数器(CancellationToken CancellationToken)
{
而(!cancellationToken.IsCancellationRequested)
{
//或者while(true)和token.ThrowIfCancellationRequested();改为抛出
对于(int i=0;i<1000;i++)
{
控制台写入线(i);
}
}
}
无法真正取消任务。我想你可以中止一个线程,但这通常是一个非常糟糕的主意。您需要在Counter()
方法中写入逻辑,该方法在满足条件时导致循环退出。然后通过设置该条件“结束”任务,使其退出循环。例如,您可以使用while(true)
,而不是while(flag==true)
,并从主代码中设置flag
。