线程中join和await之间的区别

时间:2014-07-04 05:05:53

标签: c# asp.net multithreading thread-safety

Join:阻塞调用线程,直到线程终止

等待:暂停执行该方法,直到等待的任务完成

join和await之间有什么区别。

当我们可以使用加入以及何时可以使用等待时,任何人都可以帮助我吗?

谢谢, HITESH

1 个答案:

答案 0 :(得分:2)

加入和等待是完全不同的。在最简单和最广泛的术语中,Join是执行线程的旧方法,等待是新的方式。如果有任何疑问,请等待并节省很多头痛。

要详细了解,如果您使用var thread = new Thread(MyRunMethod); thread.Start()(或类似的东西)手动创建线程,并且您想等待该方法完成,那么您需要稍后调用thread.Join()如果你想在继续你的程序之前等待它完成。在这种情况下,如果您需要来自该函数的结果,您需要确保自己处理线程同步并将锁定放在所有正确的位置,这样您以后就不会最终读取部分数据。

使用async await模型,您可以让Framework处理优化线程使用,您需要做的就是在使用结果时逐步完成另一个抽象级别。在这种情况下,不需要处理线程同步或锁定,所有这些都由Framework处理。

public async Task<String> GetGoogle()
{
    var result = await new WebClient().DownoadString("http://www.google.com");
    return result;
}

public void Main()
{
    Console.WriteLine(GetGoogle().Result);
}

另一个重要的区别是Thread.Join会在等待时阻塞你调用的线程(消耗一些资源)。通过使用await ...,您将释放当前线程以执行其他操作,并等待事情完成。