Code Monkey home page Code Monkey logo

Comments (5)

ryanmasondavies avatar ryanmasondavies commented on June 15, 2024

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.

pronebird avatar pronebird commented on June 15, 2024

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.

pronebird avatar pronebird commented on June 15, 2024

Closing as it's not going anywhere this way. #dealingwithit

from bolts-objc.

ryanmasondavies avatar ryanmasondavies commented on June 15, 2024

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.

pronebird avatar pronebird commented on June 15, 2024

@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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.