【问题标题】:Threading.Sleep with System.Threading.TasksThreading.Sleep 与 System.Threading.Tasks
【发布时间】:2011-05-09 08:36:29
【问题描述】:

如果我将 System.Threading.Thread.Sleep() 放入以 TaskFactory.StartNew() 启动的任务中会发生什么? 它是让正在执行的线程本身进入睡眠状态,还是该线程会在第一个任务睡眠时执行另一个任务?

我问这个是因为我目前正在处理一个有时必须等待从其客户端接收数据的服务器,如果我让正在处理客户端连接的任务处于休眠状态,我想知道是否然后,执行此特定任务的线程能够在第一个连接等待数据时处理另一个连接。

【问题讨论】:

  • 我不知道你想要达到什么目标,但 IMO 你应该重新考虑你的设计。启动任务以使其进入睡眠状态对我来说不是最佳解决方案。对于长时间运行的操作(包括任何睡眠),请考虑使用线程。

标签: c# multithreading task-parallel-library


【解决方案1】:

Thread.Sleep 总是让当前执行的线程休眠,无论该线程是否正在执行任务。

没有任务休眠的概念——只有一个线程。当然,线程池将允许执行多个线程,因此您最终可能会得到比您真正需要的更多的线程。

听起来您可能希望异步等待数据,当数据可用时继续该任务的其余工作。

C# 5 的异步方法将使这一切变得很多更简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多