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,这允许您手动取消您的任务.
基本上,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起源只是错误的.