当前位置:首页 > C#编程 > C#/.net框架 > 正文内容

Task暂停、继续、结束

Jorge2年前 (2022-05-09)C#/.net框架700

 

Task实现暂停、继续、结束。

看到这个,有些童鞋可能会想到自动化设备上的“停止”,“开始”按钮。

我们要说的是,Task的暂停继续只是对于task的调度流程来说的,至于task内部跑的轴的运动逻辑来说,你还得有另外的办法让它同步暂停继续。

所以整机控制功能并不是靠线程的挂起与继续就那么容易实现的。



代码:


几点说明。

你可以在return那里下断点,程序最后会取消task的执行,就断在这里了。

因为这个是异步的代码,所以你只能这样检测取消功能了。


另外,对于WaitOne()之后的set和Reset,请记住口诀:  Reset暂停,Set启动


C#
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;namespace ConsoleApplication19{
    class Program
    {
        static void Main(string[] args)
        {
            CancellationTokenSource tokenSource = new CancellationTokenSource();
            CancellationToken token = tokenSource.Token;
            ManualResetEvent resetEvent = new ManualResetEvent(true);

            Task task = new Task(async () =>
            {
                //输出i
                int i = 0;
 
                while (true)
                {
                    if (token.IsCancellationRequested)
                    {
                        return;
                    }
                    resetEvent.WaitOne();
                    //do something
                    Console.WriteLine(i++);
                    await Task.Delay(100);
                }
               
            }, token);
            task.Start();

            //2秒后暂停
            Thread.Sleep(2000);
            resetEvent.Reset();
            Console.WriteLine("Reset");
            //2秒后启动
            Thread.Sleep(2000);
            resetEvent.Set();
            Console.WriteLine("Set");
            //2秒后暂停
            Thread.Sleep(2000);
            resetEvent.Reset();
            Console.WriteLine("Reset");
            tokenSource.Cancel();
            Console.ReadKey();
        }

        
    }}


image.png


--------------------- 

作者:hackpig

来源:www.skcircle.com

版权声明:本文为博主原创文章,转载请附上博文链接!

扫描二维码推送至手机访问。

版权声明:本文由7点博客发布,如需转载请注明出处。

本文链接:http://6dot.cn/?id=78

标签: .NET.NET框架
分享给朋友:

“Task暂停、继续、结束” 的相关文章

C#的变迁史 - C# 4.0 之线程安全集合篇

C#的变迁史 - C# 4.0 之线程安全集合篇

作为多线程和并行计算不得不考虑的问题就是临界资源的访问问题,解决临界资源的访问通常是加锁或者是使用信号量,这个大家应该很熟悉了。  而集合作为一种重要的临界资源,通用性更广,为了让大家更安全的使用它们,微软为我们带来了强大的并行集合:System.Collections.Concurrent里面的各...

C# 当前不会命中断点 还没有为该文档加载任何符号

C# 当前不会命中断点 还没有为该文档加载任何符号

这个问题网上的经验大概如下:1。 清空方案,重新编译2。 删除项目bin目录下的东西,重新编译3。 解决相互引用的问题。4。 确保不是run的release5。把项目编译改为x866。 好像没发现其它的了。。。这些解决不了我们手上的项目的问题。我们的工程有几十个项目。我长话短说,解决方法是:引导项目...

C# 异步和等待,async/await

C# 异步和等待,async/await

 首先,重点是:异步将从根本上改变大多数代码的编写方式。是的,我相信 async/await 会比 LINQ 产生更大的影响。理解异步将在短短几年内成为基本必需品。关键字介绍让我们直接开始吧。我将使用一些稍后将阐述的概念——请继续阅读第一部分。异步方法看起来像这样:public ...

细说进程、应用程序域与上下文之间的关系(四)——进程应用程序域与线程的关系

细说进程、应用程序域与上下文之间的关系(四)——进程应用程序域与线程的关系

目录一、进程的概念与作用二、应用程序域三、深入了解.NET上下文四、进程应用程序域与线程的关系 四、进程、应用程序域、线程的相互关系4.1 跨AppDomain运行代码在应用程序域之间的数据是相对独立的,当需要在其他AppDomain当中执行当前 AppDomain中的程序集代码时,可以使...

细说进程、应用程序域与上下文之间的关系(三)—— 深入了解.NET上下文

细说进程、应用程序域与上下文之间的关系(三)—— 深入了解.NET上下文

目录一、进程的概念与作用二、应用程序域三、深入了解.NET上下文四、进程应用程序域与线程的关系三、深入了解.NET上下文3.1 .NET上下文的概念应用程序域是进程中承载程序集的逻辑分区,在应用程序域当中,存在更细粒度的用于承载.NET对象的实体,那就.NET上下文Context。所有的.NET对象...

细说进程、应用程序域与上下文之间的关系(一)——进程的概念与作用

细说进程、应用程序域与上下文之间的关系(一)——进程的概念与作用

引言本文主要是介绍进程(Process)、应用程序域(AppDomain)、.NET上下文(Context)的概念与操作。虽然在一般的开发当中这三者并不常用,但熟悉三者的关系,深入了解其作用,对提高系统的性能有莫大的帮助。在本篇最后的一节当中将会介绍到三者与线程之间的关系,希望对多线程开发人员能提供...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。