【发布时间】:2018-05-21 08:42:45
【问题描述】:
我有一个名为“RequestMessage()”的异步方法。在此方法中,我将向消息代理发送消息。因为我不知道什么时候可以期待结果,所以我使用“TaskCompletionSource”。我希望异步方法在回复消息到达时终止(我将从代理收到一个事件)。
到目前为止,这工作正常。现在,我的问题是这条消息永远无法得到答复,或者至少为时已晚。
我正在寻找一种改变来实现我自己的超时。为此,我尝试了一个计时器,以及反应式扩展的观察者。问题总是一样的 - 我无法让我的主线程和计时器线程同步,因为我使用的是 .NET Core 2 并且没有 SynchronizationContext。
所以,在我的代码中有一个观察者..
Observable
.Interval(TimeSpan.FromSeconds(timeOutInSeconds))
.Subscribe(
x =>
{
timeoutCallback();
});
如果时间到期,则应调用回调。在我的调用者方法中,我以这种方式处理回调:
TimeoutDelegate timeoutHandler = () => throw new WorkcenterRepositoryCommunicationException("Broker communication timed out.", null);
正如您已经意识到的那样,这个异常永远不会被捕获,因为它不会被抛出到主线程。
如何在此处同步线程?
提前致谢!
【问题讨论】:
-
如何向代理发送消息?客户端?还有什么?
标签: c# asynchronous async-await timeout asp.net-core-2.0