在Asp.net vNext中的Thread.Sleep

3
我需要调用一个JSON API,该API每秒只允许有限数量的请求,以确保不会从特定IP发生DDOS攻击。 由于这将作为一种自动化过程在夜间进行,因此请求持续多长时间并不重要,但我需要一种方法在每个请求之间暂停,以确保我的IP没有被临时列入黑名单。
之前我使用Thread.Sleep(1000)来确保只发送1个请求/秒,但在asp.net vNext中,Thread.Sleep不存在/无法使用,因此我不能这样做。
是否有其他替代方法或更好的处理方式? 因为没有批量API,所以必须一次一个请求地完成。
提前致谢。

1
你确定 Thread.Sleep 不存在,而不仅仅是需要特定的依赖关系吗?顺便说一句,如果你正在编写异步代码,你应该在问题中说明,因为它会显着影响你完成这个操作的方式。 - Jon Skeet
我添加了System.Threading,但是Thread类在其中不存在。也就是说,在asp.net vnext中,System.Threading.Thread不存在,除非它已经被移动或者我缺少某些依赖项,否则默认情况下它将从之前调用它的位置中消失。此外,目前它不是异步的。 - Jack
你缺少一个依赖项 - 请查看我的答案以获取详细信息。一般来说,你不应该假设某些东西缺失,只因为它们没有在开箱即用的情况下出现 - 在 DNX 中有很多依赖项可供使用。 - Jon Skeet
我并不是仅仅假设它丢失了,这就是为什么我添加了“不起作用/不存在”,因为我不确定并且在网上找不到任何信息。感谢您指出如果不是异步应该使用thread.sleep。我从未为这样的事情使用过异步,所以下一步就是这个!谢谢。 - Jack
你做出了假设:你说“在asp.net vNext中Thread.Sleep不起作用/不存在,所以我无法这样做”-但这并不是真的。你做出了一个假设,认为它不起作用或不存在,而不是询问是否是这种情况。 - Jon Skeet
2个回答

11
await System.Threading.Tasks.Task.Delay(1000) 
或者
System.Threading.Tasks.Task.Delay(1000).Wait()

同时请注意,await Task.Delay可以使您的执行线程能够被其他工作复用,但是Thread.Sleep会阻塞。


正如我在答案中所指出的,我认为这在非异步方法中并不合适;至少使用Thread.Sleep会更符合惯用法,而且它确实存在于DNX中。 - Jon Skeet

3

您缺少一个依赖项。如果您的代码不是异步的,则不应使用 Task.Delay... 您应该使用 Thread.Sleep() 或正常方式。

只需添加以下依赖项:

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

然后你可以像平常一样使用 Thread.Sleep

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接