0

请在 timer_elapsed 事件中连接/使用 datacontext 对象的最佳方法是什么。我在 timer_elapsed 中有一个 datacontext 对象,它第一次运行完美,但在随后调用 timer_elapsed 事件时什么也不做。我知道每次调用线程池线程上的 elapsed 事件都会创建一个新实例。我如何控制这种行为或至少让我的代码始终如一地运行。谢谢。

这是我的结构图配置

ForRequestedType<BulkSMSDataContext>()
            .TheDefaultIs(() => new BulkSMSDataContext())
            .CacheBy(InstanceScope.Hybrid);

这是我的计时器实现

void _timerSendScheduledMessages_Elapsed(object sender, ElapsedEventArgs e)
    {
        DateTime currentUTC = DateTime.UtcNow.AddSeconds(-DateTime.UtcNow.Second).AddMilliseconds(-DateTime.UtcNow.Millisecond);

        var msgToSend = from c in _messageRepository.GetMessages(MessageTypes.Scheduled)
                        where c.Time == currentUTC
                        select c;


        foreach (var msg in msgToSend)
        {
            int scheduledMsgID = msg.MessageID;
            Response res = _messageService.Send(msg);
            _messageRepository.DeleteScheduledMessage(scheduledMsgID);
        }
    }
4

1 回答 1

0

为了更好地控制范围,我会在每次调用时更改 elapsed 事件以创建一个新的 _messageRepository,假设您将 datacontext 传递给 _messageRepository。然后让结构映射将您的数据上下文注入其中。

否则,你最终会得到一个定义不明确的工作单元,这往往会引发像你所遇到的那样的范围界定问题。

虽然没有看到你的实现,但很难准确地说出来。

于 2012-07-13T08:10:53.927 回答