C# Task.Run 和 Task.Factory.StartNew 区别
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();
}
其他的线程文章
2. .NET中并行开发优化
3. C# Task.Run 和 Task.Factory.StartNew 区别
4. C#中多线程的并行处理
5. C#中多线程中变量研究
C# Task.Run 和 Task.Factory.StartNew 区别的更多相关文章
- Task.Run与Task.Factory.StartNew的区别
Task是可能有延迟的工作单元,目的是生成一个结果值,或产生想要的效果.任务和线程的区别是:任务代表需要执行的作业,而线程代表做这个作业的工作者. 在.Net 4中,Task.Factory.Star ...
- 【.NET】- Task.Run 和 Task.Factory.StartNew 区别
Task.Run 是在 dotnet framework 4.5 之后才可以使用, Task.Factory.StartNew 可以使用比 Task.Run 更多的参数,可以做到更多的定制. 可以认为 ...
- Task.Run 和 Task.Factory.StartNew 区别
Task.Run 是在 dotnet framework 4.5 之后才可以使用, Task.Factory.StartNew 可以使用比 Task.Run 更多的参数,可以做到更多的定制. 可以认为 ...
- .NET - Task.Run vs Task.Factory.StartNew
翻译自 Stephen Toub 2011年10月24日的博文<Task.Run vs Task.Factory.StartNew>,Stephen Toub 是微软并行计算平台团队的首席 ...
- Task.Run Vs Task.Factory.StartNew
在.Net 4中,Task.Factory.StartNew是启动一个新Task的首选方法.它有很多重载方法,使它在具体使用当中可以非常灵活,通过设置可选参数,可以传递任意状态,取消任务继续执行,甚至 ...
- Task.Run Vs Task.Factory.StartNew z
在.Net 4中,Task.Factory.StartNew是启动一个新Task的首选方法.它有很多重载方法,使它在具体使用当中可以非常灵活,通过设置可选参数,可以传递任意状态,取消任务继续执行,甚至 ...
- Task.Run Vs Task.Factory.StartNew 【收藏】
在.Net 4中,Task.Factory.StartNew是启动一个新Task的首选方法.它有很多重载方法,使它在具体使用当中可以非常灵活,通过设置可选参数,可以传递任意状态,取消任务继续执行,甚至 ...
- Task.Run 和 Task.Factory.StartNew
在.Net 4中,Task.Factory.StartNew是启动一个新Task的首选方法.它有很多重载方法,使它在具体使用当中可以非常灵活,通过设置可选参数,可以传递任意状态,取消任务继续执行,甚至 ...
- .Net4.0如何实现.NET4.5中的Task.Run及Task.Delay方法
前言 .NET4.0下是没有Task.Run及Task.Delay方法的,而.NET4.5已经实现,对于还在使用.NET4.0的同学来说,如何在.NET4.0下实现这两个方法呢? 在.NET4.0下, ...
随机推荐
- 如何让SQLServer的 itemNum 字段 按照数字大小顺序排序
我的 itemNum 从1到20,可是超过了SQLServer的默认排序这样的1101112...19234567如何才能让排序成为这样1234567891011.. . 解决办法:因为 itemNu ...
- VMware 12 安装 Windows server 2008 系统
一.准备工作 安装了VMware 12 的PC 准备windows server 2008 的ISO操作系统文件 官网地址:https://www.microsoft.com/en-us/downl ...
- 在chrome console中添加jQuery
由于现有seajs等封装,jQuery等已不在全局暴露,即使网站中已使用jQuery,在console也使用不了. 在chrome中可以用以下代码加入jQuery: fetch('http://cod ...
- mysql数据库优化(一)
在实际项目中,通过设计表架构时,设计系统结构时,查询数据时综合提高查询数据效率 1.适当冗余 数据库在设计时遵守三范式,同时业务数据(对数据的操作,比如资料审核,对某人评分等)和基础数据(比如资料详情 ...
- expected_conditions模块提供了判断页面元素的16种方法
1.title_is: 判断当前页面的title是否完全等于(==)预期字符串,返回布尔值2.title_contains : 判断当前页面的title是否包含预期字符串,返回布尔值3.presenc ...
- Swift用户通知授权
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIAppli ...
- php laravel加密 form表单认证 laravel分页
use Illuminate\Support\Facades\Crypt; echo Crypt::encrypt(123); //加密echo "<br>";//解密 ...
- c#控件 menuStrip(转)
一.概述 菜单通过存放按照一般主题分组的命令将功能公开给用户. MenuStrip 控件是此版本的 Visual Studio 和 .NET Framework 中的新功能.使用该控件,可以轻松创建 ...
- 使用IntelliJ IDEA 配置Maven
创建一个本地仓库路径 配置本地仓库路径 配置maven环境变量 配置maven环境变量 打开命令输入 : mvn version,配置成功如下图所示: 在IntelliJ IDEA中配置maven f ...
- MAC vim安装gruvbox主题
gruvbox是一款优秀的vim配色方案,但是却不是vim自带的配色方案,这里记录一下安装过程. gruvbox官网:https://github.com/morhetz/gruvbox gruvbo ...