Join:阻塞调用线程,直到线程终止
等待:暂停执行该方法,直到等待的任务完成
join和await之间有什么区别。
当我们可以使用加入以及何时可以使用等待时,任何人都可以帮助我吗?
谢谢, HITESH
答案 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 ...
,您将释放当前线程以执行其他操作,并等待事情完成。