The single most important use is that your code has to have one – i.e. everything you write in C# executes in an AppDomain
. That is quite important ;-p
If you mean additional app-domains:
When using plugins and other untrusted code, it allows you both isolation, and the ability to unload them (you can’t unload assemblies – only entire app-domains).
I’m using it currently to load dynamically generated dlls, so that I can unload them.
They also allow you to set different configuration files, trust levels, etc – but have associated costs of complexity and remoting.
MSDN has a section on app-domains, here.