ParameterizedThreadStart task[通俗易懂]

ParameterizedThreadStart task[通俗易懂]usingSystem;usingSystem.Diagnostics;usingSystem.Threading;usingSystem.Threading.Tasks;namespaceAsyncAwait{classProgram{//http://www.cnblogs.com/sheng-jie/p/6471986.html…

大家好,又见面了,我是你们的朋友全栈君。

using System;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;

namespace AsyncAwait
{

class Program
{

//http://www.cnblogs.com/sheng-jie/p/6471986.html
// 3.3. 什么是前台线程
// 默认情况下,使用Thread.Start()方法创建的线程都是前台线程。前台线程能阻止应用程序的终结,只有所有的前台线程执行完毕,CLR才能关闭应用程序(即卸载承载的应用程序域)。前台线程也属于工作者线程。

//3.4. 什么是后台线程
// 后台线程不会影响应用程序的终结,当所有前台线程执行完毕后,后台线程无论是否执行完毕,都会被终结。一般后台线程用来做些无关紧要的任务(比如邮箱每隔一段时间就去检查下邮件,天气应用每隔一段时间去更新天气)。后台线程也属于工作者线程。

static void Main(string[] args)
{

//C# async关键字用来指定某个方法、Lambda表达式或匿名方法自动以异步的方式来调用。
Console.WriteLine(“主线程启动,当前线程为:” + Thread.CurrentThread.ManagedThreadId);
var task = GetLengthAsync();

Console.WriteLine(“回到主线程,当前线程为:” + Thread.CurrentThread.ManagedThreadId);

Console.WriteLine(“线程【” + Thread.CurrentThread.ManagedThreadId + “】睡眠5s:”);
Thread.Sleep(5000); //将主线程睡眠5s

var timer = new Stopwatch();
timer.Start(); //开始计算时间

Console.WriteLine(“task的返回值是” + task.Result);

timer.Stop(); //结束点,另外StopWatch还有Reset方法,可以重置。
Console.WriteLine(“等待了:” + timer.Elapsed.TotalSeconds + “秒”);//显示时间

Console.WriteLine(“主线程结束,当前线程为:” + Thread.CurrentThread.ManagedThreadId);

//Console.WriteLine(“主线程开始!”);

//ForeBackGround();
//ThreadPoolTest();
Console.ReadKey();
}

private static async Task<int> GetLengthAsync()
{

Console.WriteLine(“GetLengthAsync()开始执行,当前线程为:” + Thread.CurrentThread.ManagedThreadId);

var str = await GetStringAsync();

Console.WriteLine(“GetLengthAsync()执行完毕,当前线程为:” + Thread.CurrentThread.ManagedThreadId);

return str.Length;
}

private static Task<string> GetStringAsync()
{

Console.WriteLine(“GetStringAsync()开始执行,当前线程为:” + Thread.CurrentThread.ManagedThreadId);
return Task.Run(() =>
{

Console.WriteLine(“异步任务开始执行,当前线程为:” + Thread.CurrentThread.ManagedThreadId);

Console.WriteLine(“线程【” + Thread.CurrentThread.ManagedThreadId + “】睡眠10s”);
Thread.Sleep(10000); //将异步任务线程睡眠10s

return “GetStringAsync()执行完毕”;

});

}

public static void TaskDemo2()
{

Console.WriteLine(“主线程ID:” + Thread.CurrentThread.ManagedThreadId);
Task.Run(() => Console.WriteLine(“Task对应线程ID:” + Thread.CurrentThread.ManagedThreadId));
Console.ReadLine();
}

public static void TaskDemo()
{

Console.WriteLine(“主线程ID:” + Thread.CurrentThread.ManagedThreadId);

Task.Factory.StartNew(() => Console.WriteLine(“Task对应线程ID:” + Thread.CurrentThread.ManagedThreadId));
Console.ReadKey();
}

/// <summary>
/// ThreadPool(线程池)
/// </summary>
public static void ThreadPoolTest()
{

WaitCallback workItem = state => Console.WriteLine(“当前线程Id为:” + Thread.CurrentThread.ManagedThreadId);

for (int i = 0; i < 10; i++)
{

ThreadPool.QueueUserWorkItem(workItem);
}

}

/// <summary>
/// 前台线程、后台线程
/// </summary>
private static void ForeBackGround()
{

//创建前台工作线程
Thread t1 = new Thread(Task1);
t1.Start();

//创建后台工作线程
Thread t2 = new Thread(new ParameterizedThreadStart(Task2));
t2.IsBackground = true; //设置为后台线程
t2.Start(“传参”);
}

private static void Task1()
{

Thread.Sleep(1000); //模拟耗时操作,睡眠1S
Console.WriteLine(“前台线程被调用!”);
}

private static void Task2(object data)
{

Thread.Sleep(2000); //模拟耗时操作,睡眠2S
Console.WriteLine(“后台线程被调用!” + data);
}

}
}

转载于:https://www.cnblogs.com/Jeely/p/11001736.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/159614.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 逆向-加壳工具介绍

    逆向-加壳工具介绍经过两周尝试手动编写加壳程序,目前也只是能实现给PE文件添加新区块,后面还有重定位表的修复,地址输入表的处理,虚拟机和花指令技术等反调试手段…一大串要学习的工作,几乎就是放弃了吧,通过这两周学习能让自己对PE文件和偏移地址、虚拟地址有一定了解也算不亏。目前就是转而向使用工具方向了。目前加壳的两个主要方向是压缩和加密。压缩壳压缩壳以UPX为代表,使用方法在前面的文章中有,此类壳的功能已压缩为主,对文件的加密效果几乎没有,Peid等侦壳工具可以轻而易举地发现这些壳,相应也有较成熟的脱壳机来实现。所以当文件

  • Inside IIS & Asp.Net

    Inside IIS & Asp.Net

  • [Python嗯~机器学习]—L1正则化和L2正则化

    正则化解决过拟合问题正则化(Regularization)是机器学习中一种常用的技术,其主要目的是控制模型复杂度,减小过拟合。最基本的正则化方法是在原目标(代价)函数中添加惩罚项,对复杂度高的模型进行“惩罚”。数学表达式:式中  、 为训练样本和相应标签,  为权重系数向量;  为目标函数,  即为惩罚项,可理解为模型“规模”的某种度量;参数 控制控制正则化强弱。不同的  函数对权重…

  • pki体系包括_pct体系简介

    pki体系包括_pct体系简介1:PKI的概念        PKI(publickeyinfrastructure),即公钥基础设施,是一种以数字证书机制为基础,依托应用密码学技术(特别是公钥技术,包括加密、签名等应用技术模式)实施并提供安全服务的具体普遍适用性的网络安全基础设施。2:PKI的功能        一个有效的PKI系统必须是安全的和透明的,它的主要目的是通过自动管理密钥和证书,为用户建立起一个安全的

  • vdbench 参数详解[通俗易懂]

    vdbench 参数详解[通俗易懂]HD:主机定义如果您希望展示当前主机,则设置hd=localhost。如果希望指定一个远程主机,hd=label。system=IP地址或网络名称。clients=用于模拟服务器的正在运行的客户端数量。SD:存储定义sd=标识存储的名称。host=存储所在的主机的ID。lun=原始磁盘、磁带或文件系统的名称

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号