如何创建一个可以手动完成的Task<>

36

在单元测试中,我需要验证组件对于在不同时间完成任务的反应。

我该如何创建一个可以随意解决的 Task<>

1个回答

57

你可以使用 TaskCompletionSource 创建一个完全“手动”的任务。

表示一个未绑定到委托的 Task 的生产方,通过 Task 属性提供对消费方的访问。

将完成源的 Task 属性分配给消费者,并在需要时调用 SetResult 来完成任务。请注意,还有SetCanceledSetException 方法分别表示取消和失败。


1
谢谢!你知道 continuation 会在什么时候运行吗?当 SetResult 被调用时吗?或是稍后的某个时间?有没有办法控制这个过程? - George Mauer
它不是线程特定的 - Set*** 方法可以在任何线程上调用,对象本身也是线程安全的。它还提供了 TrySet*** 方法族来处理竞争。 - Ani
连续体将在任务完成时运行(由连续体上的任务状态过滤器确定,如果适用)。 - Ani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接