打开APP
未登录
开通VIP,畅享免费电子书等14项超值服
开通VIP
首页
好书
留言交流
下载APP
联系客服
嵌套任务和子任务
昵称10504424
>《C#》
2013.06.14
关注
public
class
Program
{
static
void
Main(
string
[] args)
{
WaitForSimpleNestedTask();
Console.WriteLine(
"
=====================================================
"
);
SimpleNestedTask();
Thread.SpinWait(
600000
);
//
等待SimpleNestedTask结束 再运行
Console.WriteLine(
"
=====================================================
"
);
//
SimpleNestedTaskAttachedToParent();
Console.Read();
}
static
void
WaitForSimpleNestedTask()
{
var
outer = Task<
int
>.Factory.StartNew(() =>
{
Console.WriteLine(
"
Outer1 task executing.
"
);
var
nested = Task<
int
>.Factory.StartNew(() =>
{
Console.WriteLine(
"
Nested1 task starting.
"
);
Thread.SpinWait(
5000000
);
Console.WriteLine(
"
Nested1 task completing.
"
);
return
42
;
});
//
父任务等待子任务完成
return
nested.Result;
//
父任务不等待子任务完成
//
return 1;
});
//
输出的时候使用了返回值outer.Result,所以自动等待父任务完成
Console.WriteLine(
"
Outer1 has returned {0}.
"
, outer.Result);
}
static
void
SimpleNestedTask()
{
var
parent = Task.Factory.StartNew(() =>
{
Console.WriteLine(
"
Outer2 task executing.
"
);
var
child = Task.Factory.StartNew(() =>
{
Console.WriteLine(
"
Nested2 task starting.
"
);
Thread.SpinWait(
500000
);
Console.WriteLine(
"
Nested2 task completing.
"
);
});
});
//
等待父任务完成,再输出字符串,如果没有这个等待,这句话会先输出
parent.Wait();
Console.WriteLine(
"
Outer2 has completed.
"
);
}
static
void
SimpleNestedTaskAttachedToParent()
{
var
parent = Task.Factory.StartNew(() =>
{
Console.WriteLine(
"
Outer3 task executing.
"
);
var
child = Task.Factory.StartNew(() =>
{
Console.WriteLine(
"
Nested3 task starting.
"
);
Thread.SpinWait(
500000
);
Console.WriteLine(
"
Nested3 task completing.
"
);
}, TaskCreationOptions.AttachedToParent);
//
增加参数TaskCreationOptions.AttachedToParent,将子任务附加进父任务,这样子任务完成后,父任务才算完成。
});
//
等待父任务完成,再输出字符串,如果没有这个等待,这句话会先输出
parent.Wait();
Console.WriteLine(
"
Outer has completed.
"
);
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报
。
打开APP,阅读全文并永久保存
查看更多类似文章
猜你喜欢
类似文章
【热】
打开小程序,算一算2024你的财运
5天玩转C#并行和多线程编程
8天玩转并行开发
并行编程和任务(二)
异步陷阱之死锁篇
C# Task的使用
[深入学习C#]C#实现多线程的方式:Task
更多类似文章 >>
生活服务
热点新闻
留言交流
回顶部
联系我们
分享
收藏
点击这里,查看已保存的文章
导长图
关注
一键复制
下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!
联系客服
微信登录中...
请勿关闭此页面
先别划走!
送你5元优惠券,购买VIP限时立减!
5
元
优惠券
优惠券还有
10:00
过期
马上使用
×