gpt4 book ai didi

C# 获取异步任务

转载 作者:太空宇宙 更新时间:2023-11-03 21:07:29 25 4
gpt4 key购买 nike

一旦您退出最初启动任务的方法,是否有一种方法可以通过 ID 获取当前正在运行的任务?我想以某种方式获取当前任务,以便我可以在不中断程序流程的情况下停止其中一些任务。

例如:

class Test
{
List<Task> listOfTasks = new List<Task>();


void taskCaller()
{
try
{
var myTask = Task.Factory.StartNew(()=> testMethod());
listOfTasks.Add(myTask);
}
catch (System.Exception)
{
//...
throw;
}
}


void taskGetter()
{
foreach (var item in listOfTasks)
{
if(item == something)
{
item.KillExecution();
}
}
}


private void testMethod()
{
// doing something
throw new NotImplementedException();
}
}

编辑

如果可能的话,我希望在没有取消 token 的情况下完成它,因为它对我不起作用,因为我正在运行一个计时器,从数据库中获取 DLL,并且取消 token 只有在我立即用 终止任务时才有效token.Cancel() 但是,如果我尝试 token.CancelAfter() 它不起作用,因为它仅在任务执行完成后才会触发,这不是主意。

编辑 2:

不要复制大量代码,这是整个流程的伪代码:

new timer(repeat method every xx time units)
open DB
do some work
save DB

继续plast1k建议...

如果在这种情况下请求取消,当我检查字典时,它说 true 但它不会对正在运行的任务做任何事情

private void getActiveTasks()
{
if (!ListOfTasks.Any())
return;
Console.WriteLine("Currently running:");
foreach (var task in ListOfTasks)
{
Console.WriteLine("\t" + task.Key);
Console.WriteLine("\t" + task.Value.MyTask.Id);
task.Value.Token.Cancel();
Console.WriteLine("\t" + task.Value.Token.IsCancellationRequested);


ListOfTasks.Remove(task.Key);
return;
}
}

最佳答案

正如您可能已经研究过的那样,到目前为止,取消任务的唯一方法是使用 cancellationtoken 让它知道取消并使其具有取消意识。此外,这也是执行此操作的首选方法。但是,由于您的问题提到您不能使用取消源,因此您可以使用另一个 SO 答案(包含链接)中提到的技术。

链接中的要点,您可以创建这些任务并在不同的线程上运行它们,并在您可能想要取消任务时中止线程

How do I force a Task to stop?

关于C# 获取异步任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40288207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com