The generic solution is to generate a 32 digit key, encoded in hexadecimal composed as follows:
1: Unique down to the millisecond. Digits 1-8 are the hex encoded lower 32 bits of the System.DateTime.Now.Millisecond() call.
2: Unique across a cluster. Digits 9-16 are the encoded representation of the 32 bit integer of the underlying IP address.
3: Unique down to the object in C#. Digits 17-24 are the hex representation of the call to Object.GetHashCode(), which is guaranteed to return distinct integers for distinct objects within a C#.
4: Unique within an object within a millisecond. Finally digits 25-32 represent a random 32 bit integer generated on every method call using the cryptographically strong System.Security.Cryptography namespace.