Comments (5)
You need to set up a token of some kind, as described in the README:
Task Cancellation
It's generally bad design to keep track of the
BFTaskCompletionSource
for cancellation. A better model is to create a "cancellation token" at the top level, and pass that to each async function that you want to be part of the same "cancelable operation". Then, in your continuation blocks, you can check whether the cancellation token has been cancelled and bail out early by returning a[BFTask cancelledTask]
. For example:- (void)doSomethingComplicatedAsync:(MYCancellationToken *)cancellationToken { [[self doSomethingAsync:cancellationToken] continueWithBlock:^{ if (cancellationToken.isCancelled) { return [BFTask cancelledTask]; } // Do something that takes a while. return result; }]; } // 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.
We are likely to add some concept like this to Bolts at some point in the future.
This just means writing a separate class with an interface like:
@interface MYCancellationToken: NSObject
@property (nonatomic, readonly, getter=isCancelled) BOOL cancelled;
- (void)cancel;
@end
You can create this and make sure your task callbacks keep a hold of it during the network process. You should check for the token's cancellation as appropriate and halt the task (by returning [BFTask cancelledTask]
) when that happens. Further callbacks can check for prior cancellation of a task using -[BFTask isCancelled]
.
from bolts-objc.
Thanks. I get BFTasks from Parse, and such ops as save cannot be cancelled apparently as Parse does not expose a method for that, and BFTask cannot be marked as cancelled either which is ... bummer. Even NSProgress
supports cancellation and allows developers to provide cancellation handler.
from bolts-objc.
Closing as it's not going anywhere this way. #dealingwithit
from bolts-objc.
Just want to point out that with Parse the 'long' tasks that might need
cancelling are often file uploads and downloads, and they do support
cancellation in an instance method on PFFile
. The sadness comes from
having to upload/download separately to saving objects in order to cancel.
Queries, saving, deleting, fetching, etc don't support cancellation AFAIK.
On 27 March 2015 at 15:21, Andrej Mihajlov [email protected] wrote:
Closing as it's not going anywhere this way. #dealingwithit
—
Reply to this email directly or view it on GitHub
#86 (comment)
.
from bolts-objc.
@iotize thanks, I use combination of file uploads and save, but also another use case is if I attach PFFiles to model and call save on model, then it will automatically upload files first and then save the record on Parse. I wish they had cancellation for models too.
from bolts-objc.
Related Issues (20)
- Documents not available at 1.9.0 on cocoapods.org. HOT 1
- EXC_BAD_ACCESS in BfTask.m
- Next Version Release? HOT 5
- 7 Semantic Issues in XCode 10.1 with Bolts 1.9.0 HOT 3
- ``` HOT 2
- setException deprecated
- Apple Review HOT 10
- Need the Bolts framework with mac catalyst support HOT 2
- Script build_framework.sh fails HOT 1
- need latest BoltsFramework HOT 1
- Built framework lacks slices HOT 2
- Bolts not updating to 1.9.1
- REMOVE ALL UIWEBVIEW REFERENCES OR TEXT IN README.MD
- IPhone
- Crash BFTask.m - Line 54 Crashed: com.parse.asynctaskqueue.sync SIGABRT ABORT 0x00000001b70da95c HOT 3
- U
- Failed to install apps when using Carthage and Xcode12.5 HOT 1
- Is Bolts relevant in 2022 for handling simple deeplinks opening from Facebook?
- Library not loaded: @rpath/Bolts.framework/Versions/A/Bolts
- Privacy manifest required by Apple
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from bolts-objc.