使用线程池中线程的任务启动方式

线程池提供了一个后台线程的池,独自管理线程,按需增加或减少线程池中的线程数。线程池中的线程用于执行一些动作后仍然返回线程池中。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.IO; namespace TaskSamples
{
class Program
{
static void Main()
{
TasksUsingThreadPool();
Console.ReadLine();
} static void TasksUsingThreadPool()
{
var tf = new TaskFactory();
Task t1 = tf.StartNew(TaskMethod, "using a task factory"); Task t2 = Task.Factory.StartNew(TaskMethod, "factory via a task"); var t3 = new Task(TaskMethod, "using a task constructor and Start");
t3.Start(); Task t4 = Task.Run(() => TaskMethod("using the Run method")); } static object taskMethodLock = new object();
static void TaskMethod(object title)
{
lock (taskMethodLock)
{
Console.WriteLine(title);
Console.WriteLine("Task id: {0}, thread: {1}",
Task.CurrentId == null ? "no task" : Task.CurrentId.ToString(),
Thread.CurrentThread.ManagedThreadId);
Console.WriteLine("is pooled thread: {0}", Thread.CurrentThread.IsThreadPoolThread);
Console.WriteLine("is background thread: {0}", Thread.CurrentThread.IsBackground);
Console.WriteLine();
}
}
}
}

  

实例化TaskFactory类,将要执行的方法作为参数传递给实例的StartNew方法

var tf = new TaskFactory();
Task t1 = tf.StartNew(TaskMethod, "using a task factory");

使用Task类的静态属性TaskFactory访问TaskFactory,并调用其StartNew方法

Task t2 = Task.Factory.StartNew(TaskMethod, "factory via a task");

使用Task类的构造函数实例化Task对象,并调用其Start方法

var t3 = new Task(TaskMethod, "using a task constructor and Start");
t3.Start();

调用Task类的静态方法Run,参数为一个Action委托

Task t4 = Task.Run(() => TaskMethod("using the Run method"));

dotnet Core 异步任务的更多相关文章

  1. Supervisor守护DotNet Core控制台程序

    Supervisor 相信对Linux系统很熟的都知道这个软件,基于Python写的一个守护进程软件.具体的介绍和使用我就不再赘述了. 使用asp.net core 部署在Linux常用的方法 我们可 ...

  2. 发布xxl-job executor dotnet core 执行器的实现

    DotXxlJob [github][https://github.com/xuanye/DotXxlJob] xxl-job的dotnet core 执行器实现,支持XXL-JOB 2.0+ 1 X ...

  3. DotNet Core中使用RabbitMQ

    上一篇随笔记录到RabbitMQ的安装,安装完成,我们就开始使用吧. RabbitMQ简介 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协 ...

  4. win10 uwp 手把手教你使用 asp dotnet core 做 cs 程序

    本文是一个非常简单的博客,让大家知道如何使用 asp dot net core 做后台,使用 UWP 或 WPF 等做前台. 本文因为没有什么业务,也不想做管理系统,所以看到起来是很简单. Visua ...

  5. dotNet Core开发环境搭建及简要说明

    一.安装 .NET Core SDK 在 Windows 上使用 .NET Core 的最佳途径:使用Visual Studio. 免费下载地址: Visual Studio Community 20 ...

  6. dotnet core 使用 MongoDB 进行高性能Nosql数据库操作

    好久没有写过Blog, 每天看着开源的Java社区流口水, 心里满不是滋味. 终于等到了今年六月份 dotnet core 的正式发布, 看着dotnet 社区也一步一步走向繁荣, 一片蒸蒸日上的大好 ...

  7. dotnet Core Asp.net 项目搭建

    Asp.Net Core 介绍 Asp.Net Core 目前最新版本 1.0.0-preview2-003131 Asp.Net Core官网:https://dotnet.github.io/ A ...

  8. DotNet Core 介绍

    前言 asp.net core rtm 6月底即将发布,自己也想着为社区做点共享,刚好最近不太忙,看到社区的小伙伴们都在为dotnet core的推广而贡献力量,项目中刚好在用rc2版本,就多写些文章 ...

  9. dotnet core 出现Can not find runtime target for framework '.NETCoreApp,Version=v1.6' 的解决办法

    如果你在更新dotnet core新的类库后运行程序提示如下的错误: Can not find runtime target for framework '.NETCoreAPP, Version=v ...

随机推荐

  1. ABBYY PDF Transformer+支持的格式

    ABBYY PDF Transformer+是一个新的,全面的巧妙解决PDF文档的工具,它将泰比的光学字符识别(OCR)技术和Adobe®PDF技术完美结合,以确保实现便捷地处理任何类型的PDF文件, ...

  2. java递归算法提前返回值带出

    /** * */ package testJava.java.foreach; import java.util.ArrayList; import java.util.LinkedList; imp ...

  3. Qt OpenGL 鼠标拾取实现

    在之前的文章中讲到了OpenGL鼠标拾取操作的例子,工作中需要在Qt中实现,下面的程序演示了QT中opengl的拾取例子. 本例子在Qt5.12和Qt Creator4.8.0上测试,使用的是QOpe ...

  4. iOS - 国内注册境外 Apple id 账号

    注册前准备工作 需要手头MAC一台 AppStore下载VPN Plus FQ到美国(ipip.net 查看当前ip 是否是在境外 当前ip 在境外才可以哦) 动手搞起来 https://applei ...

  5. 九、Sql Server 基础培训《进度9-复杂查询练习》(实际操作)

    知识点: 复杂查询1:统计全校有多少个男生.有多少个女生? 写法1(分组): select sex as 性别,count(*) as 人数 from student group by sex 写法2 ...

  6. JS学习大作业-Excel

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  7. C# Linq处理list数据

    获取数据列表. //获取数据列表,Model是类 IList<Model> list = dao.getmx(Model, pageInfo);//DataTable数据DataTable ...

  8. win10 安装mysql

    现在mysql压缩包:https://downloads.mysql.com/archives/community/ 在目录下新建data文件夹,my.ini文件,内容如下: [mysqld] bas ...

  9. 使用isEmpty()报空指针异常

    使用isEmpty()是出现了空指针异常NullpointException: 原来isEmpty()用来判断一个变量是否已经初始化了,因为“”和new 的时候系统都会为其分配内存,不管是否有值,当为 ...

  10. 进程间通信之——队列Queue

    队列是先进先出. from multiprocessing import Queue q = Queue(6) # 队列容纳上限 q.put(1) # 放到队列里面 q.put(2) q.put(3) ...