Hello,
When/If you do try Hopac, feel free to submit issues and also email me directly. I would also appreciate even short notes on things that you found confusing at first, but then worked out yourself, so I might be able to improve the documentation when I have the time.
My opinion is, of course, very biased, but I'd say that the top reasons to prefer Async over Hopac would be the following:
1) Preservation of synchronization contexts is required throughout your application domain. It is a key design decision made in Hopac to use a custom parallel scheduler for performance reasons and preservation of synchronization contexts is very unlikely to be supported by Hopac.
2) Fully cooperative scheduling is out of the question. This is also another key design decision made in Hopac for performance reasons. It is possible, perhaps even likely, that Hopac will allow for a variety of scheduling options in the future, but there is no guarantee and the current design is cooperative, while Async makes some preemptive switches.
3) You want to use an "official" library from Microsoft or some other company.
4) You already have a significant Async codebase and/or you need to interface with other Async based libraries in performance significant ways.
5) You find that MailboxProcessor or some other particular feature of Async is a better fit to your problem.
As I'm writing this email, I'm adding some basic operations to Hopac to make it easier to interface Async and Hopac code. For example, there will operations to convert Async operations to Hopac jobs and vice versa and you will be able to directly bind Async operations within Hopac jobs, but those conversions, of course, incur some overheads.
Top reasons to prefer Hopac over Async would be better performance and the direct availability of more expressive CML -style concurrent communication mechanisms. You could implement CML -style operations on top of current Async, but performance would likely be worse than Hopac.
As I've mentioned in several places already, before labeling Hopac as version 1.0.0, I plan to do one more pass over the programming interface of Hopac. The main reason being is that I want to investigate whether making more use of computation expressions could make the programming interface more convenient. I also plan to provide a module or namespace that provides as much as possible a drop-in replacement for Async so that in many cases one could then simply open that namespace and recompile to switch to or test with Hopac.
I'm also open to moving Hopac to fsprojects or some other Github organization for collaboration purposes.
-Vesa