任务取消与用户输入重叠

时间:2018-04-10 15:03:47

标签: c# multithreading cancellationtokensource

我内心有一个异步任务:

while (!cancellationToken.IsCancellationRequested)
{
    Console.Write("Enter workload : ");
    if (!int.TryParse(Console.ReadLine(), out var workTime)) continue;

    Console.Write("Enter the duration of a GC collection (in ms) : ");
    if (!int.TryParse(Console.ReadLine(), out var gctime)) continue;

    Console.Write("Enter the number of requests between 2 GCs : ");
    if (!int.TryParse(Console.ReadLine(), out var gcinter)) continue;

    *do irrelevant stuff here*
}

目前,如果请求取消,则检查离开循环仅在循环开始时发生。因此,如果请求取消并且用户尚未输入工作负载,则他将能够继续执行该方法的步骤。我不希望这样。

是否有一种优雅的方式(即不检查方法的每一行之间的取消令牌)只是在请求时取消任务,即使用户正在写某些东西或者只是独立于方法中发生的事情?

提前致谢:)

1 个答案:

答案 0 :(得分:0)

嗯,thread.Abort()可能是您案例中的解决方案。但它有自己的潘多拉盒子的问题。您可能想重新考虑您的逻辑,以及为什么要立即中止线程。任务没有中止。这是因为中止线程会导致编程状态和稳定性的极端模糊

你可能想看看下面的问题(他们也想做你这样的事):
Is it possible to abort a Task like aborting a Thread (Thread.Abort method)?
Cancel/Abort a Task in C#