gpt4 book ai didi

c# - 取消任务而不检查循环中的取消标记

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

让我们留下以下代码:

Var task = Task.Run(() => RunTest(ct.Token));

Void RunTask(CancellationToken token)
{
If (!token.IsCancellationRequested)
}

Cmd.CommandText = code;
Cmd.ExecuteNonQuery();
}
}

这确实取消了正在运行的长时间运行的 SQL 查询,如果请求取消并终止长时间运行的 SQL 查询,我如何立即终止任务?我知道“Cancel()”,但如何根据 cancellationToken 触发它?

最佳答案

如果您使用 ExecuteNonQuery那么您的任务正在运行的线程正在其他人的代码中的某个地方等待 - 您无法征用它并进行其他工作。

但好消息是,您不需要它。只需使用 ExecuteNonQueryAsync 相反,让 SqlCommand对象处理取消本身。

async Task RunTask(CancellationToken token)
{
Cmd.CommandText = code;
await Cmd.ExecuteNonQueryAsync(token);
}

您可能还想 Unwrap 你的 task 里有什么这个阶段的变量,因为它现在是一个Task<Task>通常,如果你有兴趣的话,你会对内部的 Task 感兴趣。完成了。

或者您可能想考虑是否Task.Run是必需的。这取决于为什么 Task.Run在第一种情况下被插入到您的样本中以及实际事件有多少RunTask正在表演。

关于c# - 取消任务而不检查循环中的取消标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35865752/

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