在控制台应用程序的Main
方法中:
Do().ContinueWith(t => Do())
.ContinueWith(t => Do())
.ContinueWith(t => Do());
Do
是一种返回Task
的方法:
var source = new CancellationTokenSource();
var token = source.Token;
return Task.Factory.StartNew(() =>
{
Console.WriteLine("Inside " + _Counter);
token.WaitHandle.WaitOne(1000);
Console.WriteLine(_Counter++ + " is done");
}, token);
_Counter
是一个整数字段:
private static int _Counter = 1;
当我跑步时,结果如下:
内部1
1完成了 里面2
里面2
里面2
2完成了 3完成了 4完成了
因此,假设我有Task
名为 t ,Action<Task>
名为 a 。
如果我在 t 完成后拨打t.ContinueWith(a)
, 应该被称为,对吧?当 a 运行时,这应该意味着代表 t 调用已经结束。
导致此结果的原因是什么?我在这里没有明显的东西吗? 我用的是什么:
答案 0 :(得分:7)
如果我调用t.ContinueWith(a),应该在t完成后调用,对吗?
不确定。但是,由于您的Do
函数创建了一个新任务,它会立即完成,从而开始下一个Do
。从Do
删除任务创建(只保留Console.WriteLine的东西),它应该按预期工作。
static void Do()
{
Console.WriteLine("Inside " + _Counter);
Thread.Sleep(1000);
Console.WriteLine(_Counter + " is done");
}
static void Main(string[] args)
{
Task.Factory.StartNew(Do)
.ContinueWith(t => Do())
.ContinueWith(t => Do())
.ContinueWith(t => Do());
}