/// <summary> /// Try receiving a message (Async) /// </summary> /// <param name="topic">The topic name</param> /// <param name="cancellationToken"></param> /// <returns>The message received -or- ReceivedResult<T>.Empty when no message is waiting</returns> public async Task <ReceivedResult <T> > TryReceiveAsync(string topic, CancellationToken cancellationToken = default(CancellationToken)) { if (Logger.Value.IsDebugEnabled()) { Logger.Value.Debug($"TryReceiveAsync<{typeof(T).FullName}>(...)"); } var parameters = InitRemoveDbParameters(topic); using (var connection = GetConnection()) { await connection.OpenAsync(cancellationToken).ConfigureAwait(ContinueOnCapturedContext); var sqlCmd = InitRemoveDbCommand(connection, parameters); var reader = await sqlCmd.ExecuteReaderAsync(cancellationToken) .ConfigureAwait(ContinueOnCapturedContext); if (!reader.Read()) { return(ReceivedResult <T> .Empty); } var json = (string)reader[0]; var messageType = (string)reader[1]; var id = (int)reader[3]; var contractResolver = new MessageDefaultContractResolver(); var settings = new JsonSerializerSettings { ContractResolver = contractResolver }; var message = JsonConvert.DeserializeObject <T>(json, settings); return(new ReceivedResult <T>(true, json, topic, messageType, id, message)); } }
/// <summary> /// Try receiving a message /// </summary> /// <param name="topic">The topic name</param> /// <returns>The message received -or- ReceivedResult<T>.Empty when no message is waiting</returns> private ReceivedResult <T> TryReceive(string topic) { if (Logger.Value.IsDebugEnabled()) { Logger.Value.Debug($"TryReceive<{typeof(T).FullName}>(...)"); } var parameters = InitRemoveDbParameters(topic); using (var connection = GetConnection()) { connection.Open(); var sqlCmd = InitRemoveDbCommand(connection, parameters); var reader = sqlCmd.ExecuteReader(); if (!reader.Read()) { return(ReceivedResult <T> .Empty); } var json = (string)reader[0]; var messageType = (string)reader[1]; var id = (long)reader[3]; var contractResolver = new MessageDefaultContractResolver(); var settings = new JsonSerializerSettings { ContractResolver = contractResolver }; var message = JsonConvert.DeserializeObject <T>(json, settings); return(new ReceivedResult <T>(true, json, topic, messageType, id, message)); } }