Task.Factory.StartNew()和Task.Run()有什么区别

yaojunyi3725 2014-12-04 11:52:21
加精
网上搜一答案说"Task.Factory.StartNew和Task.Run区别之一就有Task.Run会自动执行Unwrap操作,但是Task.Factory.StartNew不会,Task.Run就是Task.Factory.StartNew的更人性化封装,而Task.Factory.StartNew则是原始的执行。" 网址是http://www.mgenware.com/blog/?p=338
但是我写代码发现二者的返回值类型是一样的 我怀疑是framework版本不同造成的差异
两个方法还是有些不同之处的 Factory作为工厂方法重载更多达到16个,而Task.Run只有8个,Factory.StartNew的有些重载有 TaskCreationOptions creationOptions参数或配合Func<object, TResult> function使用的object state参数
...全文
28163 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
yaojunyi3725 2014-12-07
  • 打赏
  • 举报
回复
仅从源码图片上看 run方法是对factory的一个四参数重载方法的返回值做了unwrap的
vbfool 2014-12-04
  • 打赏
  • 举报
回复
引用 2 楼 yaojunyi3725 的回复:
还有就是 tsk.Wait()和await tsk的区别(tsk是一个Task类的实例) 前者会阻塞UI线程, 而后者不会 初学任务式异步编程,呵呵
后者会把await之后的内容包装起来放到新的线程环境去执行,前者就是简单的卡住当前线程等待Task完成而已。
yaojunyi3725 2014-12-04
  • 打赏
  • 举报
回复
还有就是 tsk.Wait()和await tsk的区别(tsk是一个Task类的实例) 前者会阻塞UI线程, 而后者不会 初学任务式异步编程,呵呵
cllonl99 2014-12-04
  • 打赏
  • 举报
回复
后者会把await之后的内容包装起来放到新的线程环境去执行
qq_24212633 2014-12-04
  • 打赏
  • 举报
回复
后者会把await之后的内容包装起来放到新的线程环境去执行
beyondma 2014-12-04
  • 打赏
  • 举报
回复
这个开源之后就能看到了吧。
#blackheart 2014-12-04
  • 打赏
  • 举报
回复

7,657

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧