c# - 如何取消任务但让她完成块?
问题描述
我有一个程序(.NET Core C#)从数据库中删除每个帐户的数据 - 删除与该帐户相关的所有数据。我想添加一个选项来停止程序,但为程序所在的人完成删除,然后停止并退出。我想做这样的事情,当我按任意键时,程序将完成打印 10 个条目,然后停止并退出。例如:
public static void Main(string[] args)
{
// ???
}
static void Console_CancelKeyPress(object sender, ConsoleCancelEventArgs e)
{
Console.WriteLine("Shutting down...");
// Cleanup here
}
private static async Task MyTask(CancellationToken cancellationToken)
{
Print(cancellationToken);
}
public static void Print(CancellationToken cancellationToken)
{
while (cancellationToken.IsCancellationRequested!)
{
for (int i = 1; i < 10; i++)
{
Console.WriteLine(i);
}
}
}
我想知道你有什么想法,
谢谢!
解决方案
只是不要将cancellationToken 传递给dbContext。当您可以停止程序时,请手动检查 cancelToken。
private static async Task DeleteAllAccounts(CancellationToken cancellationToken)
{
var accounts = await GetAccountsAsync(cancellationToken);
foreach (var account in accounts)
{
await DeleteAccountAsync(account, CancellationToken.None);
if (cancellationToken.IsCancellationRequested)
break;
}
}
推荐阅读
- c# - Autofac 没有成功创建复杂对象
- docker - 从 Virtualbox 机器的快照重新启动后,Hyperledger Fabric-Composer 网络中的“SERVICE_UNAVAILABLE”
- rest - 如何在 Katalon api 请求中将 formdata 与文件嵌套
- kubernetes - 如何在 Kubernetes 中删除损坏的节点
- awk - 如何分离 OCRed 文本中错误组合的单词?
- wordpress - 按角色获取用户表
- ios - Swift:AVAudioPlayer 没有播放,线程可能出错?
- java - Eclipse:“制作:*** 没有规则可以将目标设为‘全部’。停止。”
- templates - confd 中的 `getvs` 是否与 yaml 列表一起使用?
- c++ - C++ 中的括号重载运算符是否应该声明为 const 函数?