Task线程池和方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace 方法使用共享数据实验_Task线程_
{
	internal class Program
	{
		//共享数据
		static int Num = 0;

		/// <summary>
		/// 主方法
		/// </summary>
		/// <param name="args"></param>
		static void Main(string[] args)
		{
			Tasks();

			//延长程序的执行时间
			Thread.Sleep(100000);
		}

		/// <summary>
		/// 测试方法 
		/// </summary>
		/// <param name="I"></param>
		static void Idea(int I) 
		{
			Console.WriteLine("\n\t"+"----"+ I.ToString());
		}

		/// <summary>
		/// 开启Task线程
		/// </summary>
		static void Tasks() 
		{
			//调用测试方法 500ms调用一次
			Task.Run(() =>
			{
				try
				{
					while (true)
					{

						Thread.Sleep(500);
						Idea(Num);
					}
				}
				catch
				{ return; }
			});


			// 共享数据变化 200ms改变一次共享数据
			Task.Run(() =>
			{
				try
				{
					while (true)
					{
						Thread.Sleep(200);
						Num++;
					}
				}
				catch
				{ return; }
			});
		}


		//总结 : 在使用线程池时 调用方法不要使用共享参数 因为方法的参数会随着共享参数的变化而变化 会导致数据错乱 从而影响方法执行的结果
		//调用方法时最好不要使用共享数据 可以将共享数据的值转换到临时参数时将临时参数调用方法
		//线程池难以控制 使用时要注意 
		//winForm部分
		//beginInvoke 异步委托 本质上也是线程池 主要用来更新UI控件时使用
        //Refresh()界面刷新不能与Task线程暂停一起使用 停不住 
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值