小编niv*_*510的帖子

NATS - 使用异步句柄函数订阅事件

我正在使用 NATS 机制在不同进程之间发布事件,当我订阅一个主题并提供处理该主题的异步操作时,如果处理该主题的操作抛出异常,我无法捕获它,因为我不这样做等待调用。

问题是“connection.subscribeAsync”参数如下:

delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);

我使用自定义属性来确定该操作是异步操作还是同步操作

如果是异步的,我使用反射从 Action 构建任务;

但在这一点上,看起来我必须在两个糟糕的选择之间做出选择,

第一种是使用 GetAwaiter().GetResults();

第二个是执行方法 - async void 并用 try 和 catch 包装调用,这样我将捕获在同步上下文之前发生的异常。

我很想听到任何解决这些问题的建议。

代码快照:

async void MsgEvent(object sender, EncodedMessageEventArgs eArgs)
{
    try
    {
        if (IsAsyncAction(request.Action))
        {
            await (Task)request.Action.GetMethodInfo()
                    .Invoke(request.Action, new object[] { eArgs });

        }
        .
        .
        .

    }
    catch (Exception e)
    {
        _logger.LogError(e.Message);
    }
}

var subscription = connection.SubscribeAsync(request.Topic, MsgEvent);

    /// <summary>
    /// Expresses interest in the given <paramref name="subject" /> to the NATS Server, …
Run Code Online (Sandbox Code Playgroud)

.net c# delegates asynchronous nats.io

5
推荐指数
1
解决办法
863
查看次数

标签 统计

.net ×1

asynchronous ×1

c# ×1

delegates ×1

nats.io ×1