小编And*_*nka的帖子

按时间取消任务

我有一个多线程应用程序,我需要在一定时间后取消每个任务,即使在取消时,他们使用非托管资源.现在我使用以下代码(例如,控制台应用程序).在实际应用中,延迟可能发生在非托管资源中.

static void Main()
    {
        for (int i = 0; i < 10; i++)
        {
            Task.Factory.StartNew(Do, TaskCreationOptions.LongRunning);
        }

        Console.ReadLine();
    }

    private static void Do()
    {
        new Timer(Thread.CurrentThread.Abort, null, 1000, -1);

        try
        {
            Console.WriteLine("Start " + Task.CurrentId);
            Thread.Sleep(2000);
            Console.WriteLine("End " + Task.CurrentId);
        }
        catch (Exception)
        {
            Console.WriteLine("Thread Aborted " + Task.CurrentId);
        }
    }
Run Code Online (Sandbox Code Playgroud)

得到结果:

在此输入图像描述

但从安全角度来看,我不确定它是否适合真正的应用.我也在不同的变种中使用了CancellationToken,但是它没有给我正确的结果,因为我在使用CancellAfter()或.Delay()时使用了时间跨度并且在获得时间后取消任务我获得了以下结果:

static void Main()
    {
        for (int i = 0; i < 10; i++)
        {
            var clt = new CancellationTokenSource();

            Task task = new Task(() =>
            { …
Run Code Online (Sandbox Code Playgroud)

c# multithreading task cancellationtokensource

5
推荐指数
1
解决办法
3662
查看次数