Hello World!
Toggle navigation
Home
开发
运维部署
旧博客搬家
About Me
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Archives
Tags
Task.Run vs Task.Factory.StartNew
2019-07-11 02:53:08
20
0
0
lion
# 参考资料 [https://devblogs.microsoft.com/pfxteam/task-run-vs-task-factory-startnew/](https://devblogs.microsoft.com/pfxteam/task-run-vs-task-factory-startnew/) [https://www.licc.tech/article.aspx?id=53](https://www.licc.tech/article.aspx?id=53) # Task.Run是Task.Factory.StartNew的简写 Task.Run 等效于: Task.Factory.StartNew(someAction,CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default); ### TaskCreationOptions.DenyChildAttach 参数说明 如果你不希望一个Task的启动的儿子们Attach到它自己身上,则可以在启动爸爸Task时为它指定TaskCreationOptions.DenyChildAttach。当通过DenyChildAttach启动的爸爸Task试图指定AttachedToParent来启动儿子Task时,AttachedToParent将会失效。 相应地,使用TaskCreationOptions.AttachedToParent创建的儿子Task则带有以下3个特点: 爸爸Task会等待儿子Task结束。 爸爸Task会捕获儿子Task的Exception。 爸爸Task的执行状态取决于儿子Task的执行状态。 # Task.Run会 自带 UmWrap功能 ##示例1 var t = Task.Run(async delegate { await Task.Delay(1000); return 42; }); the type of ‘t’ is Task<int>, 等效于: var t = Task.Factory.StartNew(async delegate { await Task.Delay(1000); return 42; }, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default).Unwrap(); ## 示例2 int result = await Task.Run(async () => { await Task.Delay(1000); return 42; }); 等效于: int result = await Task.Factory.StartNew(async delegate { await Task.Delay(1000); return 42; }, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default).Unwrap(); 等效于: int result = await await Task.Factory.StartNew(async delegate { await Task.Delay(1000); return 42; }, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);
Pre:
GitBook使用
Next:
tar增量备份zfs增量备份
0
likes
20
Weibo
Wechat
Tencent Weibo
QQ Zone
RenRen
目录