从MSMQ接收消息时,Task.StartNew.ReceiveAsync()无法正常工作

时间:2017-02-22 06:57:36

标签: c# task-parallel-library task msmq

我正在使用此网址how-can-i-read-messages-from-a-queue-in-parallel实施阶段,它在以前使用时运行良好,经过一段时间不能正常工作,我不明白什么是发生了什么?花了一些时间后,我得出结论,程序停止在特定的方法。

/// <summary>
    /// APM -> TAP conversion for MessageQueue.Begin/EndPeek.
    /// </summary>
    private static Task<Message> PeekAsync(MessageQueue messageQueue)
    {
        return Task.Factory.FromAsync(messageQueue.BeginPeek(), messageQueue.EndPeek);
    }

当我在RunAsync()方法上注释掉此实现,并调用ReceiveAsync()方法

 /// <summary>
    /// APM -> TAP conversion for MessageQueue.Begin/EndReceive.
    /// </summary>
    private static Task<Message> ReceiveAsync(MessageQueue messageQueue, TimeSpan timeout)
    {
        return Task.Factory.FromAsync(messageQueue.BeginReceive(timeout), messageQueue.EndPeek);
    }

然后程序终止,没有异常,也没有任何事情发生。简单的程序终止。

从我的角度来看Task.Factory.FromAsync()是一个原因,但不是为什么?

如果我使用相同的队列接收消息BeginReceive() eventhandler它正常工作。如何识别这个?

1 个答案:

答案 0 :(得分:0)

ReceiveAsync函数中,FromAsync的第二个参数应为messageQueue.EndReceive而不是messageQueue.EndPeek