gpt4 book ai didi

c# - Task.ContinueWith 在任务完成执行之前运行

转载 作者:行者123 更新时间:2023-11-30 14:14:25 27 4
gpt4 key购买 nike

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;

当我运行时,结果是这样的:

Inside 1
1 is done
Inside 2
Inside 2
Inside 2
2 is done
3 is done
4 is done

让我们假设我有一个 Task称为t 和一个Action<Task>称为a
如果我调用 t.ContinueWith(a) , a 应该在 t 完成后调用,对吗?当 a 运行时,这应该意味着任何委托(delegate) t 调用都已结束。

是什么导致了这个结果?我在这里没有得到明显的东西吗?
我用什么:

  • window 8 RTM
  • .NET Framework 4.5

最佳答案

If I call t.ContinueWith(a), a should be called after t completes, right?

当然。但是由于您的 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());
}

关于c# - Task.ContinueWith 在任务完成执行之前运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12226060/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com