You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求为IMessageReceiver接口添加TryReceive及TryReceiveAsync方法

Got it!要在IMessageReceiver接口里添加同步和异步的TryReceive方法来支持超时接收消息,对吧?直接看下面的实现方案:

实现IMessageReceiver接口的TryReceive与TryReceiveAsync方法

首先,我们先定义完全符合需求的IMessageReceiver接口:

public interface IMessageReceiver
{
    // 同步超时接收消息方法
    bool TryReceive(out Message msg, TimeSpan timeout);
    
    // 异步超时接收消息方法
    Task<bool> TryReceiveAsync(out Message msg, TimeSpan timeout);
}

方法细节说明

  • 同步TryReceive:返回bool值标记是否成功获取到消息,成功时通过out参数输出收到的Message实例;timeout参数指定等待消息的最长时间,超时后返回false,out参数会被设为null(或对应类型的默认值)。
  • 异步TryReceiveAsync:逻辑和同步方法完全对齐,只是封装为异步任务。注意:C# 7.0及以上版本才支持异步方法中使用out参数,如果你的项目版本较低,建议改用返回Task<(bool Success, Message Message)>的形式,但这里完全按照你的需求实现。

调用示例

同步调用(完全匹配你想要的写法)

IMessageReceiver receiver = GetReceiverInstance(); // 替换为你的实例获取逻辑
if (receiver.TryReceive(out Message msg, TimeSpan.FromSeconds(30)))
{
    // 成功收到消息,执行处理逻辑
    Console.WriteLine($"收到消息内容:{msg.Content}");
}
else
{
    // 超时或未获取到消息,执行兜底逻辑
    Console.WriteLine("30秒内未收到任何消息");
}

异步调用

IMessageReceiver receiver = GetReceiverInstance();
Message msg;
if (await receiver.TryReceiveAsync(out msg, TimeSpan.FromSeconds(30)))
{
    // 异步处理收到的消息
    await ProcessMessageAsync(msg);
}
else
{
    // 异步接收超时,执行对应处理
    Console.WriteLine("异步接收消息超时");
}

如果要实现这个接口的具体类,内部需要处理超时逻辑——比如同步方法可以用Monitor.Wait或CancellationToken配合等待,异步方法可以用Task.Delay结合取消令牌来实现超时控制。

内容的提问来源于stack exchange,提问作者ni24

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:14:57