Task 多线程交替运行 求大神指教

白纸黑字 2013-06-05 05:49:48
static void Main(string[] args)
{
for (int i = 0; i < 10; i++)
{
demo dm = new demo
{
ID = i,
Name = "Text" + i,
DownFrom = "中国"
};
que.Enqueue(dm);
}
CancellationTokenSource cts = new CancellationTokenSource();
Task parent = new Task(() =>
{

//创建任务工厂
TaskFactory tf = new TaskFactory(cts.Token, TaskCreationOptions.AttachedToParent, TaskContinuationOptions.AttachedToParent, TaskScheduler.Default);
//添加一组具有相同状态的子任务
Task[] task = new Task[]{
tf.StartNew(() => { test(que, cts.Token); }),
tf.StartNew(() => { test(que, cts.Token); }),

};
});

parent.Start();
parent.Wait();
Console.Read();
}
static demo dm;
static Queue<demo> que = new Queue<demo>();
public static demo test(Queue<demo> list, CancellationToken token)
{

if (token.IsCancellationRequested)
{

}

foreach (var va in list)
{
dm = new demo
{
ID = va.ID,
Name = va.Name,
DownFrom = va.DownFrom
};
Console.WriteLine(dm.ID + "\t" + dm.Name + "\t" + dm.DownFrom + "\t" + Task.CurrentId);
}

return dm;
}

public class demo
{
public int ID { get; set; }
public string Name { get; set; }
public string DownFrom { get; set; }
}

我想要的结果是 两个线程交替运行
0 Text0 中国 1
1 Text1 中国 2
2 Text2 中国 1
3 Text3 中国 2
4 Text4 中国 1
5 Text5 中国 2
6 Text6 中国 1
7 Text7 中国 2
8 Text8 中国 1
9 Text9 中国 2
...全文
102 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
如果的有规律,无需多线程,只需把内容按照你的输出规则加载到同一个线程
ariesget 2013-06-20
  • 打赏
  • 举报
回复
你必须要这样按一定顺序运行为什么用多线程呢。。一个线程跑不就好了。
超级大咸鱼 2013-06-20
  • 打赏
  • 举报
回复
定义全局变量 bool type =true; 第一个线程执行之前加判断 if(type) { 执行完成后 type=false; } 第二个线程执行前加判断 if(!type) { 执行完成后 type=true; } 这是2个线程同时跑的时候 多线程可以吧bool换成int来判断
弦弦 2013-06-20
  • 打赏
  • 举报
回复
Task的运行结果是异步,你如何控制上一个和下一个是一样的?
白纸黑字 2013-06-08
  • 打赏
  • 举报
回复
白纸黑字 2013-06-05
  • 打赏
  • 举报
回复
菜鸟 初学中 求指教

111,125

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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