✅ OperateResult —— 操作结果
命名空间: Snet.Model.data | 类: EventArgsAsync, BaseModel, ResultModel, OperateResult
OperateResult 是 Snet 所有操作返回的标准结果封装。它构建于一个分层继承链之上,从异步事件参数到带状态信息的模型,再到带计时功能的完整操作结果。
📐 继承层次
EventArgsAsync (Snet.Model.@event) -- 异步事件基础参数 + CancellationToken
└── BaseModel -- Status (bool) + Message + Time
└── ResultModel -- + ResultData (object?)
└── OperateResult -- + RunTime (int, ms)
📚 类参考
EventArgsAsync
Snet 中所有事件参数的根类。位于 Snet.Model.@event。
| 成员 | 类型 | 描述 |
|---|---|---|
CancellationToken |
CancellationToken |
协作取消令牌(JSON 序列化时忽略) |
Empty |
static EventArgsAsync |
共享的空实例 |
BaseModel —— 基础模型
| 属性 | 类型 | 默认值 | 描述 |
|---|---|---|---|
Status |
bool |
false |
true = 成功,false = 失败 |
Message |
string? |
— | 可读的状态/错误消息 |
Time |
DateTime |
DateTime.Now |
结果产生的时间戳 |
构造函数:
BaseModel()BaseModel(BaseModel result)— 拷贝构造BaseModel(bool status, string message)BaseModel(bool status, string message, DateTime time)
方法: GetDetails(out string? message) → bool, GetDetails(out BaseModel result) → bool, ToString() → string (JSON)
var result = await op.ReadAsync(address);
if (result.Status)
{
Console.WriteLine($"成功 — {result.Time}: {result.Message}");
}
else
{
Console.WriteLine($"错误 — {result.Time}: {result.Message}");
}
ResultModel : BaseModel —— 结果模型
增加了类型化的结果数据载荷:
| 属性 | 类型 | 描述 |
|---|---|---|
ResultData |
object? |
操作返回的数据载荷 |
构造函数:
ResultModel()ResultModel(bool status, string? message, object? resultData = null)ResultModel(bool status, string? message, DateTime time, object? resultData = null)
核心方法 — GetSource<T>(): 泛型提取 ResultData:
var values = result.GetSource<List<AddressValue>>();
8 个 GetDetails 重载 — 以不同组合解构 Status、Message 和 ResultData:
GetDetails(out string? message) → boolGetDetails(out object? resultData) → boolGetDetails<T>(out T? resultData) → boolGetDetails(out object? resultData, out string? message) → boolGetDetails<T>(out T? resultData, out string? message) → boolGetDetails(out string? message, out object? resultData) → boolGetDetails<T>(out string? message, out T? resultData) → bool
OperateResult : ResultModel —— 操作结果
最终结果类型。增加了运行时测量:
| 属性 | 类型 | 描述 |
|---|---|---|
RunTime |
int |
函数运行时间,单位为毫秒 (ms) |
构造函数:
OperateResult()OperateResult(OperateResult result)— 拷贝构造OperateResult(OperateResult result, int runTime)— 拷贝 + 时间覆盖OperateResult(bool status, string message, int runTime, object? resultData = null)
var result = await op.ReadAsync(address);
Console.WriteLine($"状态: {result.Status}"); // bool
Console.WriteLine($"消息: {result.Message}"); // string?
Console.WriteLine($"时间: {result.Time}"); // DateTime
Console.WriteLine($"耗时: {result.RunTime} ms"); // int
Console.WriteLine($"数据: {result.ResultData}"); // object?
🏭 工厂方法
OperateResult 提供静态工厂方法。所有成功消息使用 LanguageHandler 进行国际化。
CreateSuccessResult —— 创建成功结果
// 仅带消息的成功结果
var ok = OperateResult.CreateSuccessResult("读取完成");
// 带类型化数据的成功结果(Status = true)
var result = OperateResult.CreateSuccessResult<AddressValue>("读取完成", addressValue);
CreateFailureResult —— 创建失败结果
// 带消息的失败结果
var fail = OperateResult.CreateFailureResult("设备无响应");
注意: Status 是 bool 类型 — CreateSuccessResult 设置 Status = true,CreateFailureResult 设置 Status = false。泛型和非泛型版本都接受 (string message, T? data) 参数顺序。
💡 使用模式
检查操作状态
var result = await op.ReadAsync(address);
if (result.Status)
{
// 成功路径
ProcessData(result.ResultData);
}
else
{
// 错误路径
LogError(result.Message);
}
批量读取地址
var address = new Address(new List<AddressDetails>
{
new("温度", "40001", DataType.Float),
new("湿度", "40002", DataType.Float)
});
var result = await op.ReadAsync(address);
if (result.Status)
{
var data = result.GetSource<ConcurrentDictionary<string, AddressValue>>();
foreach (var kv in data)
Console.WriteLine($"{kv.Key} = {kv.Value.ResultValue}");
}
事件处理
op.OnDataEventAsync += async (sender, e) =>
{
if (e.Status)
await ProcessAsync(e.ResultData);
else
Console.WriteLine($"事件错误: {e.Message}");
};
计时监控
var result = await op.ReadAsync(address);
Console.WriteLine($"读取完成: {(result.Status ? "成功" : "失败")}");
Console.WriteLine($"耗时: {result.RunTime} ms");
🔧 内部实现:BegOperate / EndOperate
CoreUnify<O,D> 提供了 BegOperate() / EndOperate() 计时辅助方法,内部调用 Stopwatch 测量执行时间,构建 OperateResult.RunTime 值。这些是受保护方法,供所有 Operate 子类使用 — 用户代码无需直接调用。
🔗 相关文档
- CoreUnify 基类 —
BegOperate/EndOperate计时基础设施 - 事件系统 —
EventDataResult,EventInfoResult,EventLanguageResult - 数据模型 — 完整
BaseModel→ResultModel链 - 枚举参考 —
QualityType,DataType枚举 - IDaq 接口 — 所有返回
OperateResult的操作
