本文整理汇总了C#中IMessageSender.SendAsync方法的典型用法代码示例。如果您正苦于以下问题:C# IMessageSender.SendAsync方法的具体用法?C# IMessageSender.SendAsync怎么用?C# IMessageSender.SendAsync使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IMessageSender
的用法示例。
在下文中一共展示了IMessageSender.SendAsync方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ExecuteAsync
/// <summary>
/// 执行。
/// </summary>
/// <param name="sender">消息发送者。</param>
/// <param name="message">调用消息。</param>
public async Task ExecuteAsync(IMessageSender sender, object message)
{
var buffer = (IByteBuffer)message;
if (_logger.IsEnabled(LogLevel.Information))
_logger.Information($"接收到消息:{buffer.ToString(Encoding.UTF8)}。");
var content = buffer.ToArray();
RemoteInvokeMessage remoteInvokeMessage;
try
{
remoteInvokeMessage = _serializer.Deserialize<byte[], RemoteInvokeMessage>(content);
}
catch (Exception exception)
{
_logger.Error($"将接收到的消息反序列化成 TransportMessage<RemoteInvokeMessage> 时发送了错误,消息内容:{buffer.ToString(Encoding.UTF8)}。", exception);
return;
}
var entry = _serviceEntryLocate.Locate(remoteInvokeMessage);
if (entry == null)
{
if (_logger.IsEnabled(LogLevel.Error))
_logger.Error($"根据服务Id:{remoteInvokeMessage.ServiceId},找不到服务条目。");
return;
}
if (_logger.IsEnabled(LogLevel.Debug))
_logger.Debug("准备执行本地逻辑。");
var resultMessage = new RemoteInvokeResultMessage
{
Id = remoteInvokeMessage.Id
};
try
{
var result = entry.Func(remoteInvokeMessage.Parameters);
var task = result as Task;
if (task == null)
{
resultMessage.Result = result;
}
else
{
task.Wait();
var taskType = task.GetType();
if (taskType.IsGenericType)
resultMessage.Result = taskType.GetProperty("Result").GetValue(task);
}
}
catch (Exception exception)
{
if (_logger.IsEnabled(LogLevel.Error))
_logger.Error("执行本地逻辑时候发生了错误。", exception);
resultMessage.ExceptionMessage = GetExceptionMessage(exception);
}
try
{
if (_logger.IsEnabled(LogLevel.Debug))
_logger.Debug("准备发送响应消息。");
var resultData = _serializer.Serialize(resultMessage);
buffer = Unpooled.Buffer(resultData.Length);
buffer.WriteBytes(resultData);
await sender.SendAsync(buffer);
if (_logger.IsEnabled(LogLevel.Debug))
_logger.Debug("响应消息发送成功。");
}
catch (Exception exception)
{
if (_logger.IsEnabled(LogLevel.Error))
_logger.Error("发送响应消息时候发生了异常。", exception);
}
}
示例2: ExecuteAsync
/// <summary>
/// 执行。
/// </summary>
/// <param name="sender">消息发送者。</param>
/// <param name="message">调用消息。</param>
public async Task ExecuteAsync(IMessageSender sender, TransportMessage message)
{
if (_logger.IsEnabled(LogLevel.Information))
_logger.LogInformation("接收到消息。");
if (!message.IsInvokeMessage())
return;
RemoteInvokeMessage remoteInvokeMessage;
try
{
remoteInvokeMessage = message.GetContent<RemoteInvokeMessage>();
}
catch (Exception exception)
{
_logger.LogError("将接收到的消息反序列化成 TransportMessage<RemoteInvokeMessage> 时发送了错误。", exception);
return;
}
var entry = _serviceEntryLocate.Locate(remoteInvokeMessage);
if (entry == null)
{
if (_logger.IsEnabled(LogLevel.Error))
_logger.LogError($"根据服务Id:{remoteInvokeMessage.ServiceId},找不到服务条目。");
return;
}
if (_logger.IsEnabled(LogLevel.Debug))
_logger.LogDebug("准备执行本地逻辑。");
var resultMessage = new RemoteInvokeResultMessage();
try
{
var result = entry.Func(remoteInvokeMessage.Parameters);
var task = result as Task;
if (task == null)
{
resultMessage.Result = result;
}
else
{
task.Wait();
var taskType = task.GetType().GetTypeInfo();
if (taskType.IsGenericType)
resultMessage.Result = taskType.GetProperty("Result").GetValue(task);
}
}
catch (Exception exception)
{
if (_logger.IsEnabled(LogLevel.Error))
_logger.LogError("执行本地逻辑时候发生了错误。", exception);
resultMessage.ExceptionMessage = GetExceptionMessage(exception);
}
try
{
if (_logger.IsEnabled(LogLevel.Debug))
_logger.LogDebug("准备发送响应消息。");
await sender.SendAsync(TransportMessage.CreateInvokeResultMessage(message.Id, resultMessage));
if (_logger.IsEnabled(LogLevel.Debug))
_logger.LogDebug("响应消息发送成功。");
}
catch (Exception exception)
{
if (_logger.IsEnabled(LogLevel.Error))
_logger.LogError("发送响应消息时候发生了异常。", exception);
}
}