我有这样的例子代码:ContinueWith链接无法正常运行
static void Main(string[] args) {
var t1 = Task.Run(async() => {
Console.WriteLine("Putting in fake processing 1.");
await Task.Delay(300);
Console.WriteLine("Fake processing finished 1. ");
});
var t2 = t1.ContinueWith(async (c) => {
Console.WriteLine("Putting in fake processing 2.");
await Task.Delay(200);
Console.WriteLine("Fake processing finished 2.");
});
var t3 = t2.ContinueWith(async (c) => {
Console.WriteLine("Putting in fake processing 3.");
await Task.Delay(100);
Console.WriteLine("Fake processing finished 3.");
});
Console.ReadLine();
}
控制台输出令我感到困惑:
- 把假冒处理1
- 假处理完1
- 加工假加工2.
- 加工假加工3.
- 假处理完3
- 假处理完毕2.
我试图链的任务,使他们执行了一个又一个,我究竟做错了什么?我不能使用await,这只是示例代码,实际上我正在排队传入的任务(有些是异步的,有些不是),并且想按照它们进来的顺序执行它们,但没有并行性,ContinueWith似乎比创建一个ConcurrentQueue和处理everythning我自己,但它只是不起作用...
等待声明“分裂”任务。所以t1只会引用前半部分。我感到惊讶放入假处理2放入假处理后不立即发生1 – 2014-09-05 17:17:02
@WeylandYutani我在答案中解释了为什么这种情况没有发生。 – Servy 2014-09-05 17:18:20
其实我还在说垃圾,所以不理我 – 2014-09-05 17:19:36