1

我正在使用这里的库:https ://github.com/joelpob/betfairng用于对新的必发 API 的并发 Web 请求。在实现运行所有内容的表单之前,我使用单元测试开发了相当多的代码。

以下代码来自给出的示例,对我来说,当我从单元测试运行它时会运行它,但当我从表单运行它时会失败(使用按钮单击)。

当我按下按钮运行它时,它会正确登录,但会在“ListCurrencyRates”上超时,这个请求将在单元测试中顺利通过。

BetfairClient Client = new BetfairClient(Exchange.UK, "appKey");
MarketListener MarketListener = MarketListener.Create(Client, BFHelpers.HorseRacePriceProjection(), 1);

Client.Login("certificate", "certpass", "betfairUsername", "betfairPassword");

//*** times out here!!!!
var currencyRates = Client.ListCurrencyRates("GBP").Result; 

我没有收到错误或任何错误,我让它运行了 30 分钟,它没有抛出错误。当我暂停操作时,它只是说“这是线程从当前函数返回时将运行的下一条语句”。

有没有人对为什么会发生这种情况有任何建议?

任何帮助是极大的赞赏。

更新

在从单元测试调用 ListCurrencyRates 之前,以下线程正在运行。

Not Flagged     9420    1   Main Thread Main Thread System.Threading.WaitHandle.WaitAny()   Normal
Not Flagged     12752   0   Worker Thread   <No Name>       Normal
Not Flagged     3792    5   Worker Thread   <No Name>       Normal
Not Flagged     7436    9   Worker Thread   <No Name>       Normal
Not Flagged     14396   0   Worker Thread   <No Name>       Normal
Not Flagged     14340   10  Worker Thread   <No Name>       Normal
Not Flagged     11268   11  Worker Thread   <No Name>       Normal
Not Flagged     14420   12  Worker Thread   <No Name>   System.Threading.Thread.Join()  Normal
Not Flagged     14532   14  Worker Thread   <No Name>   System.Threading.WaitHandle.WaitAny()   Normal
Not Flagged     13448   15  Worker Thread   <No Name>       Normal
Not Flagged     14564   17  Worker Thread   <No Name>       Normal
Not Flagged     14032   0   Worker Thread   <No Name>       Highest
Not Flagged     14356   16  Worker Thread   Worker Thread   BetfairNG.MarketListener.PollMarketBooks.AnonymousMethod__18    Normal
Not Flagged     14788   19  Worker Thread   EventPumpThread System.Threading.Monitor.Wait() Highest
Not Flagged >   14800   20  Worker Thread   TestRunnerThread    Core.Trader.GetMarkets  Normal
Not Flagged     15104   21  Worker Thread   <No Name>   System.Threading.WaitHandle.WaitAny()   Normal

当我通过按下表单中的按钮运行它时,这些都在同一点运行:

Not Flagged     0   0   Unknown Thread  [Thread Destroyed]      
Not Flagged     15340   0   Worker Thread   <No Name>       Highest
Not Flagged     11716   3   Worker Thread   <No Name>       Normal
Not Flagged     14448   8   Worker Thread   vshost.RunParkingWindow [Managed to Native Transition]  Normal
Not Flagged     15344   7   Worker Thread   <No Name>       Normal
Not Flagged     14656   10  Worker Thread   .NET SystemEvents   [Managed to Native Transition]  Normal
Not Flagged >   15016   11  Main Thread Main Thread Core.Trader.GetMarkets  Normal
Not Flagged     14512   6   Worker Thread   <No Name>       Normal
Not Flagged     9272    12  Worker Thread   Worker Thread   BetfairNG.MarketListener.PollMarketBooks.AnonymousMethod__18    Normal
Not Flagged     3588    0   Worker Thread   <No Name>       Normal
Not Flagged     13656   14  Worker Thread   <No Name>   System.Threading.WaitHandle.WaitAny()   Normal

显然有一些缺失,这可能是问题的根源吗?

4

1 回答 1

1

我无法对线程比较发表评论,但确实注意到 Pobar 的示例是一个控制台应用程序,它与测试运行程序一样,在 MTA 线程上执行。而表单(WinForms 和 WPF)始终是 STA 线程的。也许尝试在线程池线程上执行您的代码,因为这些线程始终是 MTA?

于 2014-08-18T10:00:49.010 回答