ios – 实现可在Bolts Framework(BFTask)中取消的任务

前端之家收集整理的这篇文章主要介绍了ios – 实现可在Bolts Framework(BFTask)中取消的任务前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
BFTask对我很好,但我有一个抱怨:​​我还没有看到你应该如何取消任务的工作示例.关于这个主题的整个文档可以在 their GitHub page找到,其中包含一个低级部分,其中包括我关心的部分:如何取消任务.
// Somewhere else.
MYCancellationToken *cancellationToken = [[MYCancellationToken alloc] init];
[obj doSomethingComplicatedAsync:cancellationToken];

// When you get bored...
[cancellationToken cancel];

他们的代码片段后跟:

Note: The cancellation token implementation should be thread-safe.

我想知道以下内容

>有没有充分的理由说他们可能没有在BFTask接口本身提供取消方法?他们有一个属性,表示任务是否被取消,但没有办法取消它.
>他们是否有充分的理由不在BFTask本身中包含cancelToken属性
> cancel的实现是否强烈耦合到任务本身?或者是一般的实现,如同NSOperationQueue的cancelAllOperations一样?

解决方法

>正如您可能知道的,BFTask是 Future and Promises构造的一个实现:“future是一个变量的只读占位符视图,而promise是一个可写的单一赋值容器,用于设置未来的值”.
基本上,BFTask是Future:它是变量的只读占位符视图.
BFTaskCompletionSource是一个承诺:它是一个可写的单一赋值容器,用于设置未来的值. (或错误 – 或取消任务)
BFTask公共接口保持只读,因此它不允许您直接取消它.
>这与前一个问题的答案相同:BFTask是只读的,表示只读值.公开取消令牌将允许您操纵任务,这与其性质相矛盾.
>让我们来看看它: https://github.com/BoltsFramework/Bolts-iOS/blob/master/Bolts/Common/BFCancellationToken.m
BFCancellationToken令牌只存储BFTask可以检查的状态.您的异步任务代码基本上可以定期检查cancellationRequested设置为true,这允许您手动取消您的任务.

注意:Bolts Framework iOS docs说:“任务有点像JavaScript承诺”,这可能令人困惑,因为它确实是一个未来.我认为它的Javascript起源只是错误的.

猜你在找的iOS相关文章