ITopicClient GetTopicClient(string topic) { return(_topicClients.GetOrAdd(topic, _ => { var topicClient = new TopicClient( _connectionString, topic, retryPolicy: DefaultRetryStrategy ); _disposables.Push(topicClient.AsDisposable(t => AsyncHelpers.RunSync(async() => await t.CloseAsync().ConfigureAwait(false)))); return topicClient; })); }
async Task <ITopicClient> GetTopicClient(string topic) { async Task <TopicClient> InitializeTopicClient() { await EnsureTopicExists(topic); var topicClient = new TopicClient(_connectionString, topic, retryPolicy: DefaultRetryStrategy); _disposables.Push(topicClient.AsDisposable(t => AsyncHelpers.RunSync(async() => await t.CloseAsync().ConfigureAwait(false)))); return(topicClient); } var lazy = _topicClients.GetOrAdd(topic, _ => new Lazy <Task <TopicClient> >(InitializeTopicClient)); var task = lazy.Value; return(await task); }