public async Task Send(string message, Uri link, [NotNull] IReadOnlyCollection <string> tags) { var tagLine = string.Join(" ", _defaultTags.ToList().Union(tags)); var maxMessageLength = MaxTweetLength - tagLine.Length; var text = $"{Substring(message, maxMessageLength)} {tagLine} {link}"; try { _semaphore.WaitOne(); Auth.SetUserCredentials(_consumerKey, _consumerSecret, _accessToken, _accessTokenSecret); var publishTweetParameters = Tweet.CreatePublishTweetParameters(text); var tweet = Tweet.PublishTweet(publishTweetParameters); _logger.Write(LogEventLevel.Information, $"Message was sent to Twitter channel `{_name}`: `{text}`"); } catch (Exception ex) { _logger.Write(LogEventLevel.Error, "Error in TwitterCrosspostService.Send", ex); } finally { _semaphore.Release(); } }