【发布时间】:2014-01-23 13:58:21
【问题描述】:
我正在为我的项目使用 Thread.Sleep(n)。我听说 Thread.Sleep 会导致性能问题,但不确定。
我的要求是:
等待 5 分钟增量,最多 30 分钟(5 分钟的 6 倍) 延迟)。在此之后,开始增加 1 小时并执行 5 次 (额外 5 小时)。
下面我提供了在不同场景中使用 Thread.Sleep(n) 的示例代码:
Thread.Sleep(1000 * 60 * 5); //-------waiting for 5 minutes
var isDownloaded = false;
try
{
var attempt = 0;
while (attempt < 11)
{
isDownloaded = TryDownloading(strPathToDownload, strFileToDownload);
if (isDownloaded)
break;
attempt++;
if (attempt < 6)
Thread.Sleep(1000 * 60 * 5); //--------waiting for 5 minutes
else
{
if (attempt < 11)
Thread.Sleep(1000 * 60 * 60); //-------waiting for 1 hour
else
break;
}
}
}
在上面的代码中,我尝试下载一个最多 11 次下载尝试的文件。最初它会等待 5 分钟,然后尝试下载文件,这是 第一次尝试,如果失败则尝试 接下来 5 次尝试,每次尝试间隔 5 分钟 .如果前六次尝试失败,则接下来的 5 次尝试以 1 小时的间隔进行。
所以我们决定在控制台应用程序中使用 Thread.Sleep 来处理这些时间延迟。
这会导致任何问题或性能问题吗?
如果 Thread.Sleep(n) 导致性能问题,那么与使用 Thread.Sleep(n) 相比,哪种方法更好?
最后,MSDN 是否建议 Thread.Sleep(n) 有害或不应该使用?
【问题讨论】:
-
这是有害的,因为你不能中止它。它将使用池中的线程来处理 Web 应用程序请求
-
听起来你应该有一个单独的进程,并使用操作系统来安排它。
-
没有迹象表明 ASP.NET 是如何参与的,所以我删除了对它的引用。如果您在系统中的某个位置使用 ASP.NET,您应该指出它的重要性。
-
@Gabe 感谢您编辑它..
-
你会雇人做一份工作,然后付钱让他们睡觉吗?这听起来像是计时器或其他调度机制的工作。
标签: c# multithreading