【发布时间】:2013-01-07 02:58:57
【问题描述】:
我是异步/等待的新手。但我创建了 POC,但我仍然感到困惑。
方法的结果
public async void WriteLineFunc(string str)
{
await Task.Factory.StartNew(() => WaitFor2Secs());
//WaitFor2Secs();
Console.WriteLine(str);
}
和
public async void WriteLineFunc(string str)
{
//await Task.Factory.StartNew(() => WaitFor2Secs());
WaitFor2Secs();
Console.WriteLine(str);
}
是一样的。将方法作为等待有什么意义?只是为了在其他线程上运行一个函数并等待它完成?
【问题讨论】:
-
第一个版本允许主线程在等待的同时做其他事情。第二个版本不让线程在等待期间做任何事情。允许主线程做其他事情意味着应用程序保持响应。
-
你的意思是声明
await Task.Factory.StartNew(() => WaitFor2Secs());等于Task t = Task.Factory.StartNew(() => WaitFor2Secs()); Task.WaitAll(t); -
没有。
WaitAll在等待时将线程作为人质。 -
线程人质是什么意思?你的意思是同一个线程即使在等待也可以做其他事情?
-
@D J:是的。尝试将此代码放在一个简单的 Windows 窗体或 wpf 项目中。您会发现,在您的第一个示例中,负责发送消息的线程可以继续发送消息并维护响应式用户界面。在您的第二个示例中(假设 WaitFor2Secs 是睡眠),您将阻塞 UI 线程并使您的用户界面在等待期间无响应。
标签: c# multithreading asynchronous async-await c#-5.0