public void CloudFileShareSetMetadataAPM()
        {
            CloudFileShare share = GetRandomShareReference();

            try
            {
                share.Create();

                using (AutoResetEvent waitHandle = new AutoResetEvent(false))
                {
                    CloudFileShare share2 = share.ServiceClient.GetShareReference(share.Name);
                    IAsyncResult   result = share2.BeginFetchAttributes(
                        ar => waitHandle.Set(),
                        null);
                    waitHandle.WaitOne();
                    share2.EndFetchAttributes(result);
                    Assert.AreEqual(0, share2.Metadata.Count);

                    share.Metadata.Add("key1", "value1");
                    result = share.BeginSetMetadata(
                        ar => waitHandle.Set(),
                        null);
                    waitHandle.WaitOne();
                    share.EndSetMetadata(result);

                    result = share2.BeginFetchAttributes(
                        ar => waitHandle.Set(),
                        null);
                    waitHandle.WaitOne();
                    share2.EndFetchAttributes(result);
                    Assert.AreEqual(1, share2.Metadata.Count);
                    Assert.AreEqual("value1", share2.Metadata["key1"]);

                    result = share.ServiceClient.BeginListSharesSegmented(share.Name, ShareListingDetails.Metadata, null, null, null, null,
                                                                          ar => waitHandle.Set(),
                                                                          null);
                    waitHandle.WaitOne();
                    CloudFileShare share3 = share.ServiceClient.EndListSharesSegmented(result).Results.First();
                    Assert.AreEqual(1, share3.Metadata.Count);
                    Assert.AreEqual("value1", share3.Metadata["key1"]);

                    share.Metadata.Clear();
                    result = share.BeginSetMetadata(
                        ar => waitHandle.Set(),
                        null);
                    waitHandle.WaitOne();
                    share.EndSetMetadata(result);

                    result = share2.BeginFetchAttributes(
                        ar => waitHandle.Set(),
                        null);
                    waitHandle.WaitOne();
                    share2.EndFetchAttributes(result);
                    Assert.AreEqual(0, share2.Metadata.Count);
                }
            }
            finally
            {
                share.DeleteIfExists();
            }
        }