Hydra.Events.StreamContainer.GetBlobReference C# (CSharp) Méthode

GetBlobReference() public méthode

public GetBlobReference ( String shardingKey, String containerName, String streamId, CancellationToken token, StreamOptions streamOptions ) : Task
shardingKey String
containerName String
streamId String
token System.Threading.CancellationToken
streamOptions StreamOptions
Résultat Task
        public async Task<CloudAppendBlob> GetBlobReference(String shardingKey, String containerName, String streamId, CancellationToken token, StreamOptions streamOptions)
        {
            var client = _hydra.CreateBlobClient(shardingKey);
            var account = client.Credentials.AccountName;
            var container = client.GetContainerReference(containerName);
            var semaphore = GetSemaphore(account, containerName, streamId);

            if (await semaphore.WaitAsync(TimeSpan.FromSeconds(5), token))
            {
                try
                {
                    if (streamOptions.CreateContainer && !GetContainerExists(account, containerName))
                    {
                        await container.CreateIfNotExistsAsync(token);
                        SetContainerExists(account, containerName);
                    }

                    var blob = container.GetAppendBlobReference(streamId);

                    if (streamOptions.CreateBlob && !GetStreamExists(account, containerName, streamId) && !await blob.ExistsAsync(token))
                    {
                        await blob.CreateOrReplaceAsync(token);
                        SetStreamExists(account, containerName, streamId);
                    }

                    return blob;
                }
                finally
                {
                    semaphore.Release();
                }
            }

            throw new TimeoutException("Unable to get blob reference");
        }