【发布时间】:2016-09-29 14:30:34
【问题描述】:
我收到正在写入磁盘的 HL7 消息时遇到问题。问题是这两条消息是在同一毫秒内发送的,我需要确定哪一条是第一个,哪一条是第二个。我已经创建了这个代码来做到这一点,并且它大部分都有效。有时虽然它失败了,但我得到的时间跨度对象的刻度值为零。
DirectoryInfo d_messages = new DirectoryInfo(ConfigSettings.ReadSetting("AllRecievedHL7"));
d_messages.Refresh();
FileInfo[] messages = d_messages.GetFiles();
DateTime Message1 = messages[0].CreationTime;
DateTime Message2 = messages[1].CreationTime;
TimeSpan t_Test = Message1.Subtract(Message2);
if (t_Test.Ticks > 0)
{
//Message2 arrived before Message1
}
else
{
//Message1 arrived before Message2
}
有没有人知道一种方法来确定它永远不会失败?
【问题讨论】:
-
如果它们的时间戳相同,那么您只能根据文件的内容或文件的命名来判断。将消息写入磁盘的过程应负责确保排序顺序应易于确定,如果它对读取消息内容至关重要。
-
文件时间根本没有那么准确。您也不需要计算两个 DateTime 值之间的差异,直接比较它们即可。如果要确定消息顺序,请确保使用包含递增后缀的名称存储文件名
-
建议有效。由于我编写了接收消息的侦听器,因此我能够为这个测试用例添加一个标志,并且只需在消息写入磁盘和关闭时添加一个暂停。然后它从来没有失败过。最简单的解决方案。
标签: c# file datetime timespan hl7