Task.Run 是在 dotnet framework 4.5 之后才可以使用,但是 Task.Factory.StartNew 可以使用比 Task.Run 更多的参数,可以做到更多的定制。可以认为 Task.Run 是简化的 Task.Factory.StartNew 的使用,除了需要指定一个线程是长时间占用的,否则就使用 Task.Run。

长时间运行

两个函数最大的不同在于 Task.Factory.StartNew 可以设置线程是长时间运行,这时线程池就不会等待这个线程回收

Task.Factory.StartNew(() =>
{
Console.WriteLine("进行 线程" + Thread.CurrentThread.ManagedThreadId);
}, TaskCreationOptions.LongRunning);

线程异常的操作

Task.Run和Task.Factory.StartNew里面有异常的时候都是不会抛出来的,所以需要捕获异常。
外面捕获异常没有反应,这种写法不对

for (int i = ; i < ; i++)
{
try
{
Task.Factory.StartNew(() =>
{ Console.WriteLine($"Task.Factory.StartNew value {i}");
int value = / (i % );
});
}
catch
{
Console.WriteLine("Task.Factory.StartNew异常");
} Thread.Sleep();
} for (int j = ; j < ; j++)
{ try
{
Task.Run(() =>
{
Console.WriteLine($"Task.Run value {j}");
int value = / (j % );
});
}
catch
{
Console.WriteLine("Task.Run异常");
} Thread.Sleep();
}

在线程内捕获异常,这是正确的写法

for (int i = ; i < ; i++)
{
Task.Factory.StartNew(() =>
{
try
{
Console.WriteLine($"Task.Factory.StartNew value {i}");
int value = / (i % );
}
catch
{
Console.WriteLine("Task.Factory.StartNew异常");
}
});
Thread.Sleep();
} for (int j = ; j < ; j++)
{
Task.Run(() =>
{
try
{
Console.WriteLine($"Task.Run value {j}");
int value = / (j % );
}
catch
{
Console.WriteLine("Task.Run异常");
}
});
Thread.Sleep();
}

其他的线程文章

1. C#中await/async闲说

2. .NET中并行开发优化

3. C# Task.Run 和 Task.Factory.StartNew 区别

4. C#中多线程的并行处理

5. C#中多线程中变量研究

C# Task.Run 和 Task.Factory.StartNew 区别的更多相关文章

  1. Task.Run与Task.Factory.StartNew的区别

    Task是可能有延迟的工作单元,目的是生成一个结果值,或产生想要的效果.任务和线程的区别是:任务代表需要执行的作业,而线程代表做这个作业的工作者. 在.Net 4中,Task.Factory.Star ...

  2. 【.NET】- Task.Run 和 Task.Factory.StartNew 区别

    Task.Run 是在 dotnet framework 4.5 之后才可以使用, Task.Factory.StartNew 可以使用比 Task.Run 更多的参数,可以做到更多的定制. 可以认为 ...

  3. Task.Run 和 Task.Factory.StartNew 区别

    Task.Run 是在 dotnet framework 4.5 之后才可以使用, Task.Factory.StartNew 可以使用比 Task.Run 更多的参数,可以做到更多的定制. 可以认为 ...

  4. .NET - Task.Run vs Task.Factory.StartNew

    翻译自 Stephen Toub 2011年10月24日的博文<Task.Run vs Task.Factory.StartNew>,Stephen Toub 是微软并行计算平台团队的首席 ...

  5. Task.Run Vs Task.Factory.StartNew

    在.Net 4中,Task.Factory.StartNew是启动一个新Task的首选方法.它有很多重载方法,使它在具体使用当中可以非常灵活,通过设置可选参数,可以传递任意状态,取消任务继续执行,甚至 ...

  6. Task.Run Vs Task.Factory.StartNew z

    在.Net 4中,Task.Factory.StartNew是启动一个新Task的首选方法.它有很多重载方法,使它在具体使用当中可以非常灵活,通过设置可选参数,可以传递任意状态,取消任务继续执行,甚至 ...

  7. Task.Run Vs Task.Factory.StartNew 【收藏】

    在.Net 4中,Task.Factory.StartNew是启动一个新Task的首选方法.它有很多重载方法,使它在具体使用当中可以非常灵活,通过设置可选参数,可以传递任意状态,取消任务继续执行,甚至 ...

  8. Task.Run 和 Task.Factory.StartNew

    在.Net 4中,Task.Factory.StartNew是启动一个新Task的首选方法.它有很多重载方法,使它在具体使用当中可以非常灵活,通过设置可选参数,可以传递任意状态,取消任务继续执行,甚至 ...

  9. .Net4.0如何实现.NET4.5中的Task.Run及Task.Delay方法

    前言 .NET4.0下是没有Task.Run及Task.Delay方法的,而.NET4.5已经实现,对于还在使用.NET4.0的同学来说,如何在.NET4.0下实现这两个方法呢? 在.NET4.0下, ...

随机推荐

  1. Egret飞行模拟-开发记录01

    1.项目结构简介 1.1 index.html:应用入口文件,我们可以在这里面配置项目的旋转缩放模式背景颜色等. 1.2 egretProperties.json:这个文件里面进行项目配置,包括模块和 ...

  2. 极速认识RSS!

    在解释RSS是什么之前,让我先来举个栗子. 大家都能在街道看到许多海报栏.在那里,会贴出各种各样最新的消息,比如哪个系要开讲座了.星期二晚上的电影放什么.二手货转让等 等.只要看一下海报栏,就会对学校 ...

  3. 人只能靠自己 编写ETL框架使用工具

    今天开始接触到大数据模块,etl 框架工具目的是对医院中的PACS 和RIS 系统进行数据提取: 目前只查到需要用etl工具,大数据板块 ,具体实现仍是大问题 有缘人看到可以留言提示啊:

  4. C#拷贝一个库的表到另外一个库中(的四种方式)

    1.该方法 基本不能用于实际开发中 ,仅供学习参考 public string Copy() { //要复制的表名 string table = "AAAAA"; //构造连接字符 ...

  5. Android 开发 上拉加载更多功能实现

    实现思维 开始之前先废话几句,Android系统没有提供上拉加载的控件,只提供了下拉刷新的SwipeRefreshLayout控件.这个控件我们就不废话,无法实现上拉刷新的功能.现在我们说说上拉加载更 ...

  6. sql server 报错处理

    1.错误:针对程序集 'StoreProc' 的 CREATE ASSEMBLY 失败,因为程序集 'StoreProc' 未获授权,不满足 PERMISSION_SET = UNSAFE.满足以下两 ...

  7. java 启动报错 Unsupported major.minor version 52.

    这是java 版本问题,主要是版本不统一,你看看你开发工具用的java版本(编译的java版本和开发的java版本)是否统一,如果没有统一就会报这个错误.

  8. Python第10天

    装饰器:本质上是函数,为其他函数添加附件功能. 装饰器 = 高阶函数 + 函数嵌套 + 闭包 原则(开放封闭原则):1,不修改被修饰函数代码.2,不修改被修饰函数调用方式. @方法名

  9. mybatis学习1

    一.mybatis步骤 1.根据xml配置文件(全局配置文件)创建一个SqlSessionFactory对象 有数据源一些运行环境信息2.sql映射文件:配置了每一个sql,以及sql的封装规则等. ...

  10. 软件测试day1

    Windows基础 一.什么是软件(software) 计算机(computer)=硬件(hardware)+软件(software) 软  件(software)=程序(program)+文档(do ...