Task多线程
Task多线程
1.首先是我们线程之间的启动。
1.这样
Task task = new Task(()=>
{
//
System.Threading.Thread.Sleep();
Console.WriteLine("do something....");
//匿名函数,
//还要其他的一些东邪;
});
task.Start();
2.或则这样
Task t=Task.Run(()=> { Console.WriteLine("直接我就开始run了..."); });
3.再或则这样
static void DoSomething()
{
System.Threading.Thread.Sleep();
Console.WriteLine("do something..static"); }
static void Main(string[] args)
{
Task t1 = new Task(DoSomething);
t1.Start(); //这样我们就启动的落地呀; Console.WriteLine("I am main thread line");
Console.ReadLine();
}
4.这样
Task task = Task.Factory.StartNew(() => { Console.WriteLine("这样,直接使用的Task.Factory.StartNew"); });
TaskFactory tf = new TaskFactory();
Task t1 = tf.StartNew(() => { Console.WriteLine("再或则这样..."); });
总结:大概就是两种方式;构造函数和我们的factory;
1.等待任务的完成并获取返回值,这个就是我们简单的基本操作;
Task<int> task = new Task<int>(() => {
int sum = ;
Console.WriteLine("fucking life...");
for (int i = ; i < ; i++)
{
sum += i;
}
return sum;
});
task.Start();
task.Wait();
var result = task.Result.ToString();
Console.WriteLine("result is "+task.Result.ToString());
Console.WriteLine("I am main thread line");
Console.ReadLine();
2.ContinueWith方法在任务完成时启动一个新任务
Task<int> task = new Task<int>(() => {
System.Threading.Thread.Sleep();
int sum = ;
Console.WriteLine("fucking life...");
for (int i = ; i < ; i++)
{
sum += i;
}
return sum;
});
task.Start();
Console.WriteLine("主线程,执行其他任务...");
Task hoop=task.ContinueWith(t=>{
Console.WriteLine("任务执行完之后的结果是:{0}",t.Result.ToString());
});
Console.WriteLine("I am main thread line");
Console.ReadLine();
Task 的生命周期;
var task1 = new Task(() =>
{
Console.WriteLine("begin");
System.Threading.Thread.Sleep();
Console.WriteLine("finish"); });
Console.WriteLine("before start:"+task1.Status);
task1.Start();
Console.WriteLine("after start:"+task1.Status);
task1.Wait(); //用来主阻塞线程,
Console.WriteLine("after finissh:"+task1.Status);
从我们可以得出Task的简略生命周期:
Created:表示默认初始化任务,但是“工厂创建的”实例直接跳过。
WaitingToRun: 这种状态表示等待任务调度器分配线程给任务执行。
RanToCompletion:任务执行完毕。
Task 流程的控制
var task1 = new Task(() =>
{
Console.WriteLine("task 1 begin");
System.Threading.Thread.Sleep();
Console.WriteLine("task 1 finished");
}); var task2 = new Task(() =>
{
Console.WriteLine("task 2 begin");
System.Threading.Thread.Sleep();
Console.WriteLine("task 2 finished");
}); var task3 = new Task(() =>
{
Console.WriteLine("task 3 begin");
System.Threading.Thread.Sleep();
Console.WriteLine("task 3 finished");
}); task1.Start();
task2.Start();
task3.Start(); Task.WaitAll(task1, task2, task3); //他它接受数组类型的task的使用地呀;
Console.WriteLine("All task has finished"); Console.ReadLine();
Ps: Task.WaitAny
这个用发同Task.WaitAll,就是等待任何一个任务完成就继续向下执行,将上面的代码WaitAll替换为WaitAny,输出结果如下:
ContinueWith的用法。
var task1 = new Task(() =>
{
Console.WriteLine("task 1 begin");
System.Threading.Thread.Sleep();
Console.WriteLine("task 1 finished");
}); task1.Start();
var result = task1.ContinueWith<string>(t=> { Console.WriteLine("task1 finished ");
return "continue task finish.....";
});
//在每次调用ContinueWith方法时,每次会把上次Task的引用传入进来,以便检测上次Task的状态,
var send = Task.Factory.StartNew(() => { Console.WriteLine("fuck life.."); })
.ContinueWith<bool>(s => { if ( == ) return false; })
.ContinueWith<string>(r =>
{
if (r.Result)
{
return "Finished"; //可以获取上一个流程task 中的值
}
else
{
return "Error";
} });
Console.WriteLine(send.Result);
Task的取消
var tokenSource = new CancellationTokenSource();
var token = tokenSource.Token;
Console.WriteLine(token.ToString()); var task = Task.Factory.StartNew(() =>
{
for (var i = ; i < ; i++)
{
System.Threading.Thread.Sleep();
Console.WriteLine("proceeed mission...");
if (token.IsCancellationRequested)
{
Console.WriteLine("Abort mssion sucess!");
//这里也采用轮循的方式....
return;
}
} },token); token.Register(() =>
{
Console.WriteLine("Cancle task....");
}); Console.WriteLine("press enter to cancle task...");
Console.ReadKey();
tokenSource.Cancel(); Console.ReadLine();
这里还有一篇较好的文章:http://www.cnblogs.com/jesse2013/p/async-and-await.html
Task多线程的更多相关文章
- C# Task多线程
来自Eleven老师示例 private void btnTask_Click(object sender, EventArgs e) { Console.WriteLine(); Console.W ...
- Threading.Tasks.Task多线程 静态全局变量(字典) --只为了记录
--------------------------------------------------------------后台代码---------------------------------- ...
- Task多线程进行多进程
using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using Sys ...
- Task 实现多线程的模板
1.Task多线程简单模板 using System; using System.Collections.Generic; using System.Threading.Tasks; ...
- C# -- 使用 Task 执行多线程任务
C# -- 使用 Task 执行多线程任务 1. 使用 Task 执行多线程任务 class Program { static void Main(string[] args) { Task task ...
- 多线程Task
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- C#异步和多线程以及Thread、ThreadPool、Task区别和使用方法
本文的目的是为了让大家了解什么是异步?什么是多线程?如何实现多线程?对于当前C#当中三种实现多线程的方法如何实现和使用?什么情景下选用哪一技术更好? 第一部分主要介绍在C#中异步(async/awai ...
- .NET(C#):await返回Task的async方法
众所周知,async方法只可以返回void,Task和Task<T>. 对于返回void的async方法,它并不是awaitable,所以其他方法不能用await方法来调用它,而返回Tas ...
- 使用Task
http://www.cnblogs.com/Charltsing/p/taskpoolthread.html task默认对线程的调度是逐步增加的,连续多次运行并发线程,会提高占用的线程数,而等若干 ...
随机推荐
- java图片处理——多张图片合成一张Gif图片并播放或Gif拆分成多张图片
1.多张jpg图合成gif动画 /** * 把多张jpg图片合成一张 * @param pic String[] 多个jpg文件名 包含路径 * @param newPic String 生成的gif ...
- hdu Cup
这题是道水题,用数学方法做比较简单.因为在做二分法的专题,所以这里采用二分的方式做,很简单,但是还是要用到数学的知识,比如三角形相似,圆台的 体积公式等. #include"iostream ...
- 免杀ASP一句话
<% wei="日日日)""wei""(tseuqer lave 日" execute(UnEncode(wei)) function ...
- SQL Server 收缩数据库
//删除大量数据 /*** * * BEGIN TRANSACTION; * SELECT * INTO #keep FROM Original WHERE CreateDate > '2011 ...
- 【应用笔记】【AN002】通过iTool2基于MinGW平台读写EEPROM
为了增加大家 DIY 的乐趣,XiaomaGee今天为大家只做了一篇使用iTool2内置的USB转I2C来读写EEPROM的方法和代码. iTool2简介 iTool2为银杏公司面向电子类研发工程师推 ...
- SCU 2941 I NEED A OFFER!(01背包变形)
I NEED A OFFER! 64bit IO Format: %lld & %llu Submit Status Description Description Speakless ...
- 【翻译】CEDEC2015 速成Albedo Chart 制作
关于pbr材质和贴图的制作,最近llegorithmic提供了几篇不错的guide https://www.allegorithmic.com/pbr-guide 不过像如何从通过现实场 ...
- DCDC(4.5V to 23V -3.3V)
这里的电感应该用体积10*12的
- JS Date函数操作
1. 补充Format函数 // common functionsstart Date.prototype.Format = function(fmt) { //author: meizz var o ...
- zero cycles - 1 to 30 cycles - tens of millions of cycles
Computer Systems A Programmer's Perspective Second Edition To this point in our study of systems, we ...