Task.Factory.StartNew 和 Task.Factory.FromAsync 有什么区别?

咨询区

  • soleiljy

假设我们有一个涉及IO操作的方法 (读取数据库),这个方法支持以同步或者异步的方式执行。

  1. 同步方式

IOMethod()

  1. 异步方式

BeginIOMethod()  EndIOMethod()

接下来我都用 Task 来包装这两个方法。

public static void Main(){var task1 = Task.Factory.StartNew(() => { IOMethod(); });task1.Wait();var task2 = Task.Factory.FromAsync(BeginIOMethod, EndIOMethod, ... );task2.Wait();}

从资源利用率这个角度看,它们到底有什么不同?

回答区

  • svick

我就从第一种说起吧。

var task = Task.Factory.StartNew(() => { IOMethod(); });
task.Wait();

你这种写法会阻塞两个线程:

  1. 调用线程

这个很好理解,因为你用了 task.Wait() 这个阻塞版本。

  1. 线程池线程

IOMethod 方法最终会被安排到线程池工作线程上,一直到该方法执行完毕。

接下来我们聊一下第二种方式:

var task = Task.Factory.FromAsync(BeginIOMethod, EndIOMethod, ... );
task.Wait();

这种写法会阻塞一个线程

  1. 调用线程

这个很好理解,你用了 Wait() 方法。

这里我有点疑惑,既然你都用了异步IO,为何还要用 Wait() 方法呢?可以将 Wait() 改成 await 关键词,从而实现 0 阻塞,这不是更好吗?比如下面这样:

var task = Task.Factory.FromAsync(BeginIOMethod, EndIOMethod, ... );
await task;

当然如果你的项目是 .NET 4.0 的话,可以用 ContinueWith 替代,同样也可以实现 0 阻塞。

var task = Task.Factory.FromAsync(BeginIOMethod, EndIOMethod, ... );
task.ContinueWith(() => /* rest of the method here */);

点评区

我感觉 svick 大佬介绍的非常到位,入木三分,如果再辅以 windbg 看看 threadpool 的情况会更好,学习了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/292789.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多比Web 3D展示(3D机房/3D监控)中间件多比Web 3D展示(3D机房/3D监控)中间件免费下载购买地址...

多比3D是实现3D场景搭建的软件开发包,可以创建广泛的3D应用,适用于高端制造、能源、国防军工、教育科研、城市规划及建筑环艺、生物医学等领域的虚拟仿真,应用于虚拟展示、虚拟设计、方案评审、虚拟装配、虚拟实训等工作环节。 特点与优势 支…

python 工资管理软件_智慧职教云课堂2020Python程序设计(深圳信息职业技术学院)题目答案...

智慧职教云课堂2020Python程序设计(深圳信息职业技术学院)题目答案 更新时间:2020-11-23 20:41点击: 智慧职教云课堂2020Python程序设计(深圳信息职业技术学院)题目答案 更多相关问题 【判断题】在声明类的成员属性时必须要用关键…

数据结构-Hash总结(二)

转载:http://blog.csdn.net/liufei_learning/article/details/19220391 理解Hash 哈希表(hash table)是从一个集合A到另一个集合B的映射(mapping)。 映射是一种对应关系,而且集合A的某个元素只能对应集合B中的一个元素。但反过来,集合B中的一…

中国已消失的九所世界级大学

全世界只有3.14 % 的人关注了爆炸吧知识众所周知,我们国家的大学数量在世界范围内数一数二,但是有很多赫赫有名的大学却在历史中被人们遗忘,下面我们一起回顾一下那些不该被忘记的大学。>>>>▌燕京大学燕京大学(Yench…

IOS Table中Cell的重用reuse机制分析

2019独角兽企业重金招聘Python工程师标准>>> 解决代码: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSString *CellIdentifier [NSString stringWithFormat:"Cell%d%d", …

子商城管理之签到活动

--建表脚本: --create sequence create sequence SIGN_ACTIVITY_SEQ;-- Create table create table SIGN_ACTIVITY (SIGN_ACTIVITY_ID NUMBER not null,START_TIME VARCHAR2(20),END_TIME VARCHAR2(20),ACTIVITY_INTRODUCTION VARCHAR2(300),REWA…

VS2017/2019 F12无法导航到定义

今天对项目里某个对象点F12转到定义,无法跳转,研究了一会儿,找到如下解决方案:首先确认该函数是否能够正确被跳转到..就是是否真实定义了,然后确保要跳转的定义源码在项目文件下(而不是直接引用的DLL)接下来关闭VS2017…

oracle 主键删除,联合主键的创建

1,主键的删除 ALTER TABLE TABLENAME DROP PRIMARY_KEY运行上面的SQL能够删除主键;假设不成功能够用ALTER TABLE TABLENAME DROP CONSTRAINTS COLUMN CASCADE; --删除约束ALTER TABLE TABLENAME DISABLE PRIMARY_COLUMN ; --设置被设置为主键的列为无效D…

unable to launch什么意思_都表示太...以至于,so … that…?与too… to …有着明显区别...

【2019年12月8日 百天英语-Day135】【华东师范大学-林森撰写】昨日内容复习提要:昨天学习了主要学习了 ①be able to …与can的区别。②如何通过不认识的单词,猜到作者表达的含义。昨天文章如下:表示有能力做某事,be able to …与…

数据结构-Hash总结(一):理论学习篇

转载请注明出处http://blog.csdn.net/yankai0219/article/details/8185796零、学习方法简要学习理论篇,进入程序学习篇,再回头学习理论篇和实践篇一、基本概念1.Hash定义Hash定义:将任意长度的输入,通过散列算法,变成固…

Prism For WPF Login对话框又简单又合理的方案之一

一、前言 这是一篇极简的小短文。首先感谢站长和各位WPF大佬对我的指导,我学到了很多,还是关于利用Prism做Login对话框的事情,看到站长发过一篇《WPF Prism框架Region失效了?》,目前我有一个自认为更合适的解决方法&am…

html5 的支持

html5.js让IE(包括IE6)支持HTML5元素方法 微软的最新浏览器IE8及以下IE版本对HTML5标签的支持是有限的,我们可以通过在网页中添加脚本的方式来解决目前IE浏览器对HTML5支持的问题。 让IE(包括IE6)支持HTML5元素&#x…

求指教、。。。关于调用so文件

问题描述今天同事给我发来一个文件&#xff0c;说让我通过android调用里面的函数文件是&#xff1a;里面的内容是&#xff1a;call_so.cpp文件的内容&#xff1a;#pragma pack(1) //非常重要的申明&#xff0c;内存对齐的方法&#xff0c;影响sizeof()的结果#include <stdio…

数据结构-Hash总结(三):实践基础篇

转载请注明出处 http://blog.csdn.net/yankai0219/article/details/8185847问题&#xff1a;1. hash算法主表实现为什么不直接用数组,而使用malloc动态申请?2. 另外每个桶的使用 线性队列 和 双向队列 以及 二级hash的区别以及好处是什么?答案:1.1&#xff09;hash表大小如果…

人类历史上最伟大的物理学家

全世界只有3.14 % 的人关注了爆炸吧知识一沙见世界 一花窥天堂手心握无限 须臾纳永恒杨振宁曾说读上面的四句诗可以感受到物理的美但物理的美不止于此物理还有一种庄严美一种神秘美一种初窥宇宙奥秘的畏惧美物理就是如此的迷人任何语言在它的面前都很贫瘠数学让人摆脱了愚昧而…

DevToys - 开发人员的瑞士军刀

DevToys 是一个适用于开发人员的工具箱, 基于 UWP 开发, DevToys 旨在拥抱 Windows 生态系统, 免费并且开源, 拥有现代化的界面, 支持中文, 有深色/浅色主题可选, 并且它是离线化的, 所以你完全可以在无网络环境中使用。你可以使用它处理与开发相关的一些任务, 它提供 了14…

python写小猪佩奇_python之小猪佩奇

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 小猪佩奇 &#xff08;源码有点长&#xff09;# coding:utf-8 import turtle as t t.pensize(4) t.hideturtle() t.colormode(255) t.color((255,155,192),"pink") t.setup(840,500) t.speed(10) #鼻子 t.pu() t.goto(-…

PYHON中的切片

Python中的切片容易混淆&#xff0c;这里总结一下自己的看法 切片的语法 1 a [1,2,3,4] 2 x a[1:2] #实际上执行的是 a.__getitem__(slice(1,2,None)) 1 slice([start], stop[, step] 2 3 step的符号表示一种方向的含义 4 &#xff1a;从左向…

求字符串的不重复字符的最长子串长度的问题

题目: 已知一个字符串,只含有小写字母,求这个字符串的每个字符都不相同的最长子串的长度。 比如: abcd 结果是4 abcab 结果是3 思路: 用一个26个元素的整形数组表示一个字符串中是否含有某个字符。a~b分别映射到数组元素0~25。 用两个指针分别指向字符串的第一个和第…