BFTask
has been good to me but I have one complaint: I've yet to see a working example of how you ought to cancel
a task. The entirety of the documentation on the subject is found on their GitHub page with a single lowly section that includes everything but the part I care about: how to cancel the task.
// Somewhere else.
MYCancellationToken *cancellationToken = [[MYCancellationToken alloc] init];
[obj doSomethingComplicatedAsync:cancellationToken];
// When you get bored...
[cancellationToken cancel];
Their code snippet is followed by:
Note: The cancellation token implementation should be thread-safe.
I am wondering the following:
cancel
method on the BFTask
interface itself? They have a property representing whether the task was canceled but no means to cancel it.cancellationToken(s)
property on the BFTask
itself?cancel
strongly coupled to the task itself? Or is a general implementation possible as in the case of cancelAllOperations
of an NSOperationQueue
?BFTask
is an implementation of the Future and Promises construct:BFTask
is a Future
: it is a read-only placeholder view of a variable.BFTaskCompletionSource
is a promise: it is a writable, single assignment container which sets the value of the future. (or an error - or cancels the task)BFTask
public interface remains read-only , hence it does not allow you to cancel it directly.BFCancellationToken
token just stores a state, which the BFTask
can check. Your async task code can basically regularly check cancellationRequested
is set to true, which allows you to manually cancel your task.