如何取消任务但让她完成块?

问题描述

我有一个程序(.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);
        }
    }
}

我想知道你的任何想法,
谢谢!

解决方法

只是不要将取消令牌传递给 dbContext。当您可以停止您的程序时,请手动检查取消令牌。

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;
    }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...