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线程暂停一起使用 停不住
}
}
Task线程池和方法
于 2024-04-17 10:57:04 首次发布