I've been experimenting a bit with async tasks in Murky these last few days, with a GCD/Block approach.
- (void) runWithCompletionHandler:(void (^)(BOOL result, NSError *error))handler;
and then have some async equivalent to existing higher level methods:
- (void) _checkRevisionsCompletionHandler:(void(^)(BOOL result))handler
- (void)getCurrentRevisionCompletionHandler:(void(^)(HgRevision *rev))handler
- (void) _getRevNumbers: (NSString*)cmd completionHandler:(void(^)(NSArray *revs, NSError *error))handler
- (void) _getTipCompletionHandler:(void(^)(int))handler
...
There were some low level issues with NSTask, but I think I got it to work in the end. I also think that the problem some of you were having with NSTask not sending its completion notification is now solved as well. The cause was that the garbage collector was collecting some MYTask objects before the notification was sent, because the NSNotificationCenter only keeps zeroing weak reference to observers.
I then moved to a use case for this async feature, with background retrieval and display of incoming/outgoing revs to default remote in the project window. There are still some issues, but it's starting to work. There are plenty of places were async handling could be used instead of UI-blocking, synchronous calls, but I made it in a way that both can coexist. That makes it more comfortable to upgrade the whole app.
As there are quite a lot of changes, some probably breaking existing stuff, I'll have a fork for the project so that we can discuss the proposed changes without altering the main repository. Please let me know of your thoughts.

--
Raphael Sebbe
Creaceed — Creative iPhone & Mac apps
••• Twitter:
http://twitter.com/rsebbe
••• Web:
http://www.creaceed.com