我有这样的代码(此处已简化)等待完成任务:
var task_completion_source = new TaskCompletionSource<bool>();
observable.Subscribe(b =>
{
if (b)
task_completion_source.SetResult(true);
});
await task_completion_source.Task;
想法是订阅并等待 bool 值流中的 true
。这完成了“任务”,我可以继续超越 await
。
但是我想取消 -- 但不是订阅,而是等待。我想将取消 token (以某种方式)传递给 task_completion_source
,因此当我取消 token 源时,await
将继续。
怎么做?
更新:CancellationTokenSource
在这段代码之外,我这里只有来自它的 token 。
最佳答案
如果我理解正确的话,你可以这样做:
using (cancellationToken.Register(() => {
// this callback will be executed when token is cancelled
task_comletion_source.TrySetCanceled();
})) {
// ...
await task_comletion_source.Task;
}
请注意,它会在您的 await 上抛出异常,您必须处理该异常。
关于c# - 如何结合 TaskCompletionSource 和 CancellationTokenSource?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39897151/