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();
}
}

1、线程池中的任务

        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"));

2、同步任务

           TaskMethod("just the main thread");
var t1 = new Task(TaskMethod, "run sync");
t1.RunSynchronously();

3、使用单独线程的任务

        var t1 = new Task(TaskMethod, "long running",TaskCreationOptions.LongRunning);
t1.Start();

4、Future 任务结果

   static void ResultsFromTasks()
{
var t1 = new Task<Tuple<int, int>>(TaskWithResult, Tuple.Create<int, int>(, ));
t1.Start();
Console.WriteLine(t1.Result); t1.Wait(); Console.WriteLine("result from task: {0} {1}", t1.Result.Item1, t1.Result.Item2);
}
static Tuple<int, int> TaskWithResult(object division)
{
Tuple<int, int> div = (Tuple<int, int>)division;
int result = div.Item1 / div.Item2;
int reminder = div.Item1 % div.Item2;
Console.WriteLine("task creates a result ..."); return Tuple.Create<int, int>(result, reminder);
}

5、连续任务

  static void ContinuationTask()
{
Task t1 = new Task(DoOnFirst);
Task t2 = t1.ContinueWith(DoOnSecond);
Task t3 = t1.ContinueWith(DoOnSecond);
Task t4 = t1.ContinueWith(DoOnSecond);
Task t5 = t1.ContinueWith(DoOnError, TaskContinuationOptions.OnlyOnFaulted);
t1.Start(); Thread.Sleep(); }
static void DoOnFirst()
{
Console.WriteLine("doing some task {0}", Task.CurrentId);
Thread.Sleep();
}
static void DoOnSecond(Task t)
{
Console.WriteLine("task {0} finished", t.Id);
Console.WriteLine("this task id {0}", Task.CurrentId);
Console.WriteLine("do some cleanup");
Thread.Sleep();
}
static void DoOnError(Task t)
{
Console.WriteLine("task {0} had an error!", t.Id);
Console.WriteLine("my id {0}", Task.CurrentId);
Console.WriteLine("do some cleanup");
}

6、任务层次结构

         static void ParentAndChild()
{
var parent = new Task(ParentTask);
parent.Start();
Thread.Sleep();
Console.WriteLine(parent.Status);
Thread.Sleep();
Console.WriteLine(parent.Status); }
static void ParentTask()
{
Console.WriteLine("task id {0}", Task.CurrentId);
var child = new Task(ChildTask); // , TaskCreationOptions.DetachedFromParent);
child.Start();
Thread.Sleep();
Console.WriteLine("parent started child");
// Thread.Sleep(3000);
}
static void ChildTask()
{
// Console.WriteLine("task id {0}, parent: {1}", Task.Current.Id, Task.Current.Parent.Id);
Console.WriteLine("child");
Thread.Sleep();
Console.WriteLine("child finished");
}

最新文章

  1. 【Java EE 学习 77 上】【数据采集系统第九天】【通过AOP实现日志管理】【通过Spring石英调度动态生成日志表】【日志分表和查询】
  2. 使用sklearn进行集成学习——实践
  3. 微信小程序-视图模板
  4. DataTable得到某行某列的值
  5. 面向对象分析方法(II)
  6. IP 碎片重组
  7. android调用系统图片浏览器裁切后出现黑边
  8. 配置mysql允许远程连接
  9. 2761: [JLOI2011]不重复数字(平衡树)
  10. web前端图片上传(2)
  11. MySQL InnoDB 日志管理机制中的MTR和日志刷盘
  12. 使php支持pdo_mysql
  13. python3 字符串str
  14. 转: hibernate配置文件hibernate.cfg.xml和.hbm.xml的详细解释
  15. Hadoop Avro支持多输入AvroMultipleInputs
  16. Python Socket通信例子
  17. PHP微信公共号H5支付。
  18. 算法练习,链表二分最大n个
  19. SiteMapPath基本用法
  20. 基于Vue的Ui框架

热门文章

  1. linux下安装lnmp集成环境
  2. pandas数据结构之DataFrame笔记
  3. apache - storm - Setting Up a Development Environment
  4. 阿里云Centos7 搭建laravel
  5. Docker使用整理
  6. 奇妙的算法【11】LeetCode-专属算法面试题汇总
  7. ASP.NET 使用 SyndicationFeed 输出 Rss
  8. ASP.NET WEB应用程序(.network4.5)MVC 工作原理
  9. 用js原生加jquery实现下拉跳转至商品详情页,上拉回到商品简介
  10. 【转载】salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解