当我在c#控制台应用程序中编写代码以处理一个应用程序中的多个线程时,但是对于某些线程,我必须等待一段时间,然后其他线程正在等待该处于睡眠状态的线程的睡眠时间。因此当睡眠中的一个线程应按原样工作时如何实现并行编程。
我尝试过的解决方案如下。我期望的输出是i == 1
处于睡眠模式1分钟,直到同时打印另外两个i == 2
和i == 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
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();
}
但是我很确定您需要更多了解线程如何工作。祝你好运:)
一个线程。
启动应用程序时,这将创建一个线程,通常称为主线程
。为了避免程序冻结,您倾向于尽量不要在主线程中使用Thread.Sleep()
。话虽这么说,当您要创建一个类似于task的新thread时,可以通过这种方式进行处理:static void Main(string[] args)
{
Task yourTask = Task.Run( () => {
// Do Something, like your sleep.
});
yourTask.Wait();
}
如果您希望您的任务(例如,您[[需要等待某些事情结束,然后再继续执行程序),建议您在“任务类”中查看同步运行
RunSynchronously()
方法上面的链接。如果希望它异步运行(例如,不需要等待某些事情结束再继续执行程序),则可以选中此link。希望这会有所帮助。