BasicConfigProvider: use custom AsyncRWLock instead of ReaderWriterLockSlim, because ReaderWriterLockSlim is not async-safe.
BasicConfigProvider: use custom AsyncRWLock instead of ReaderWriterLockSlim, because ReaderWriterLockSlim is not async-safe.

TODO: more tests needed for AsyncRWLock, especially for data consistency between threads\tasks

DarkCaster/DotNetBlocks,DarkCaster/DotNetBlocks