一个线程处于睡眠状态时如何处理其他线程正在等待完成

问题描述 投票:-3回答:2

当我在c#控制台应用程序中编写代码以处理一个应用程序中的多个线程时,但是对于某些线程,我必须等待一段时间,然后其他线程正在等待该处于睡眠状态的线程的睡眠时间。因此当睡眠中的一个线程应按原样工作时如何实现并行编程。

我尝试过的解决方案如下。我期望的输出是i == 1处于睡眠模式1分钟,直到同时打印另外两个i == 2i == 3的时间

static void Main(string[] args)
{
    for (int i = 0; i < 10; i++) {
        if (i == 1) {
            Console.WriteLine("1");
            System.Threading.Thread.Sleep(60000);
        }
        else if (i == 2) {
            Console.WriteLine("2");
        }
        else if (i == 3) {
            Console.WriteLine("3");
        }
    }
}

OUTPUT
2
3
(after one minute) 1
c# .net multithreading async-await sleep
2个回答
1
投票
这是您的简单解决方案:

static void Main(string[] args) { Task task = null; for (int i = 0; i < 10; i++) { if (i == 1) { task = Task.Run(() => { Thread.Sleep(60000); Console.WriteLine("1"); } ); } else if (i == 2) { Console.WriteLine("2"); } else if (i == 3) { Console.WriteLine("3"); } } task.Wait(); }

但是我很确定您需要更多了解线程如何工作。祝你好运:)

1
投票
正如mjwills指出的,您在这里只有

一个线程。

启动应用程序时,这将创建一个线程,通常称为

主线程

。为了避免程序冻结,您倾向于尽量不要在主线程中使用Thread.Sleep()话虽这么说,当您要创建一个类似于task的新thread时,可以通过这种方式进行处理:

static void Main(string[] args) { Task yourTask = Task.Run( () => { // Do Something, like your sleep. }); yourTask.Wait(); }

如果您希望您的任务

同步运行

(例如,您[[需要等待某些事情结束,然后再继续执行程序),建议您在“任务类”中查看RunSynchronously()方法上面的链接。如果希望它异步运行(例如,不需要等待某些事情结束再继续执行程序),则可以选中此link希望这会有所帮助。
© www.soinside.com 2019 - 2024. All rights reserved.