- From: Ron Buckton <rbuckton@chronicles.org>
- Date: Tue, 30 Apr 2013 01:57:37 +0000
- To: es-discuss <es-discuss@mozilla.org>, "public-script-coord@w3.org" <public-script-coord@w3.org>, Tab Atkins Jr. <jackalmage@gmail.com>
- Message-ID: <33D2646B20374248B7CAA8F25919AAFC42762E6C@BY2PRD0111MB494.prod.exchangelabs.com>
I've created separate gists for three different ways that I am currently investigating as a means to support the cancellation of a Future. These can be found here: 1. Cancellation using Future: https://gist.github.com/rbuckton/5486149 2. Cancellation using Future.cancelable: https://gist.github.com/rbuckton/5484591 3. Cancellation using Future#cancel: https://gist.github.com/rbuckton/5484478 Each has a list of some of the benefits and issues I've seen while experimenting with each approach, as well as possible changes to the various APIs or algorithms for Future to make each happen. In general, cancellation of a Future can be beneficial in a number of cases. One example is the case where you are requesting a resource from a remote server using XHR. If the request was being made to fetch a page of data, and the user opted to move to the next page before the current page completed loading, it no longer becomes necessary to continue fetching the remote resource. In addition, it is no longer necessary to handle any additional computation or transformation logic that would have resulted from the successful completion of the fetch operation. Having the ability to cancel the request allows an application to quickly release resources that it no longer needs. It is also useful to be able to handle the cancelation of a long running task that might be executing in a Worker. In this case, cleanup logic that is part of cancelation would request the worker to close, ending the current operation and releasing resources. Both of the above examples are indicative of cancelling the root of an operation, but there are also circumstances where you might want to cancel a chained Future and any Future chained from it, without canceling the root. In the previous example regarding paged data, I might wish to allow the fetch operation to complete so that I could cache the data for quick retrieval, but would only want to cancel any possible UI updates that might occur in a chained Future. I'm interested to hear what others think with respect to properly handling cancellation with Futures. Ron
Received on Tuesday, 30 April 2013 01:58:10 UTC