C#等待和多线程
问题描述:
足够简单的问题,我只需要突破一个最小的混乱墙。C#等待和多线程
因此,基于下面的简单代码:
Task task1 = new Task(() =>
{
for (int i = 0; i < 500; i++)
{
Console.WriteLine("X");
}
});
task1.Start();
task1.Wait();
for (int j = 0; j < 500; j++)
{
Console.WriteLine("Y");
}
Console.ReadLine();
因此,基于上述情况,将任务是在它自己单独的线程和主线程上的其他代码?
-
现在就等待而言,我很困惑,因为我正在指示等待什么。所以,回到上面的例子,假设现在任务1有工作的一个疯狂的金额做,在主线程只存在一条语句象下面这样:
Task task1 = new Task(() => { //insane amount of work to do which might take a while }); task1.Start(); task1.Wait(); Console.WriteLine("HI"); Console.ReadLine();
是等待正好挡住了线程Task1已打开?如果是这样,那么在task1完成之前,不应该允许其他线程(主线程)和WriteLine语句执行吗?还是等待说“没有线程会运行,直到我完成”?
答
该任务计划在当前TaskScheduler中执行,这意味着它将运行在不同的线程中。
等待指示主线程等待,直到任务完成。
答
task1一个将运行在一个单独的线程。 task1.Wait()指示主线程等待task1完成执行。
答
等待导致调用线程等待任务完成。本质上,这段代码所做的是在两个线程之间同步运行,并且比只在一个线程上运行它没有获得诸如释放UI线程之类的任何好处花费的时间要长。
啊好吧,等等总是指向主线程。我假设这意味着那么其他任务(如果我有多个任务)在其他线程上仍然可以发生上下文切换? – Ilya 2010-08-17 22:21:58