我正在使用此网址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它正常工作。如何识别这个?
答案 0 :(得分:0)
在ReceiveAsync
函数中,FromAsync
的第二个参数应为messageQueue.EndReceive
而不是messageQueue.EndPeek
。