【问题标题】:Thread.Sleep in Asp.net vNextAsp.net vNext 中的 Thread.Sleep
【发布时间】:2015-12-10 14:44:52
【问题描述】:

我需要调用一个 JSON api,它每秒只允许有限数量的请求,以确保没有来自特定 IP 的 DDOS 发生。 请求需要多长时间并不重要,因为这将作为一个自动化过程在一夜之间完成,但是我需要在每个请求之间暂停以确保我的 IP 不会暂时被列入黑名单。

现在,在我完成 Thread.Sleep(1000) 以确保每秒只发送 1 个请求之前,但在 asp.net vNext Thread.Sleep 不起作用/不存在,所以我不能这样做。

是否有替代或更好的方法来处理我需要做的事情? 没有批量 API,因此必须一次完成 1 个请求。

提前致谢。

【问题讨论】:

  • 您是否确定 Thread.Sleep 不存在,而不仅仅是需要特定的依赖关系?顺便说一句,如果您正在编写异步代码,您应该在问题中这样说,因为它会显着影响您如何执行此操作。
  • 好吧,我添加了 system.therading 但类 Thread 下不存在。 IE。 System.Threading.Thread 在 asp.net vnext 中不存在,因此除非它已被移动或我缺少依赖项,否则默认情况下它在我之前调用它的位置中丢失。这也不是当前异步的。
  • 您缺少依赖项-有关详细信息,请参阅我的答案。一般来说,您不应该仅仅因为它们不是开箱即用的东西就认为它们丢失了——在 DNX 中有 很多 依赖项可供使用。
  • 我不只是假设它丢失了,这就是为什么我添加不起作用/不存在,因为我不确定并且无法在网上找到任何有关它的信息。谢谢你指出,如果它不是异步的,我应该使用 thread.sleep。从来没有为这样的事情做过异步,所以这是下一步!谢谢。
  • 确实假设:您声明“在 asp.net vNext Thread.Sleep 中不起作用/不存在,所以我不能这样做” - 那不是真的。您做了一个假设它不起作用或不存在,而不是询问是否是这种情况。

标签: c# asp.net asp.net-mvc multithreading asp.net-core-mvc


【解决方案1】:
await System.Threading.Tasks.Task.Delay(1000) 

System.Threading.Tasks.Task.Delay(1000).Wait()

另请注意,await Task.Delay 使您正在执行的线程可被其他工作重用,但是 Thread.Sleep 会阻塞。

【讨论】:

  • 正如我在回答中指出的那样,这在非异步方法中并不适合 IMO;使用Thread.Sleep至少更惯用,它肯定确实存在于 DNX 中。
【解决方案2】:

您缺少一个依赖项。如果你的代码不是异步的,你不应该使用Task.Delay...你应该使用Thread.Sleep()或者普通的。

只需添加以下依赖项:

"System.Threading.Thread": "4.0.0-beta-23516"

那么你就可以正常使用Thread.Sleep了。

当然,如果您正在编写异步代码,那么await Task.Delay(...) 是合适的 - 再次,就像平常一样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    • 2015-01-23
    • 2015-02-23
    • 1970-01-01
    相关资源
    最近更新 更多