Multithreading 并发web请求在单元测试中工作,但从表单运行时超时?

Multithreading 并发web请求在单元测试中工作,但从表单运行时超时?,multithreading,unit-testing,system.reactive,betfair,Multithreading,Unit Testing,System.reactive,Betfair,我在这里使用这个库:用于对新Betfair API的并发web请求。在我实现一个表单来运行所有东西之前,我使用单元测试开发了很多代码 下面的代码来自给定的示例,对我来说,当我从单元测试运行它时,它将运行,但当我从窗体(使用按钮单击)运行它时,它将失败 当我从按钮上运行它时,它将正确登录,但将在“ListCurrencyRates”上超时,该请求将在单元测试中顺利通过 BetfairClient Client = new BetfairClient(Exchange.UK, "appKey");

我在这里使用这个库:用于对新Betfair 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
未标记9420 1主线程主线程系统。Threading.WaitHandle.WaitAny()正常
未标记12752 0工作线程正常
未标记3792 5工作线程正常
未标记7436 9工作线程正常
未标记14396 0工作线程正常
未标记14340 10工作线程正常
未标记11268 11工作线程正常
未标记14420 12工作线程系统。线程。线程。连接()正常
未标记14532 14工作线程系统。线程。WaitHandle.WaitAny()正常
未标记13448 15工作线程正常
未标记14564 17工作线程正常
未标记14032 0工作线程最高
未标记14356 16工作线程工作线程BetfairNG.MarketListener.PollMarketBooks.AnonymousMethod_uu18正常
未标记14788 19工作线程EventPumpThread System.Threading.Monitor.Wait()最高
未标记>14800 20工作线程TestRunnerThread Core.Trader.GetMarkets Normal
未标记15104 21工作线程系统。Threading.WaitHandle.WaitAny()正常
当我按下表单中的按钮运行时,它们在同一点运行:

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
未标记0未知线程[线程已销毁]
未标记15340 0工作线程最高
未标记11716 3工作线程正常
未标记14448 8工作线程vshost.RunParkingWindow[管理到本机转换]正常
未标记15344 7工作线程正常
未标记14656 10工作线程.NET SystemEvents[管理到本机转换]正常
未标记>15016 11 Main Thread Main Thread Core.Trader.GetMarkets Normal
未标记14512 6工作线程正常
未标记9272 12工作线程工作线程BetfairNG.MarketListener.PollMarketBooks.AnonymousMethod__18正常
未标记的3588 0工作线程正常
未标记13656 14工作线程系统。Threading.WaitHandle.WaitAny()正常

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

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

@groverboy这是解决方案,我通过从BackgroundWorker运行它解决了问题(我查到它是MTA线程)。你想把这个作为答案提交给我,我会给你最好的答案吗?我不知道如何在这个问题上进行PM,与我开始对话,我会帮你解决:)没关系,这似乎不值得努力。我已经开始删除这些注释,以清理这部分知识库:)