【发布时间】:2021-04-06 14:53:13
【问题描述】:
比如有什么区别
Task<DataSet> DBTask = Task.Run (() => DBHelper.DbTest ());
Task<Boolean> CheckTimeTask = Task.Run (() => Module.CheckTime ());
Task.WhenAll (DBTask, CheckTimeTask); // <-- no wait?
if (!CheckTimeTask.Result || DBTask.Result == null)
{
Close ();
}
和
Task<DataSet> DBTask = Task.Run (() => DBHelper.DbTest ());
Task<Boolean> CheckTimeTask = Task.Run (() => Module.CheckTime ());
Task.WhenAll (DBTask, CheckTimeTask).Wait (); // <-- wait ?
if (!CheckTimeTask.Result || DBTask.Result == null)
{
Close ();
}
似乎两者都在等待返回结果?我无法弄清楚差异,那么哪个更好?
【问题讨论】:
-
如前所述,您的问题没有任何意义,因为
Task.WhenAll()除了返回一个代表所有Task对象异步完成的Task对象之外,什么都不做传递给它。您的代码丢弃了返回的Task对象,这意味着Task仍然未被观察到并且对程序没有任何影响。一个正确编写的程序会在该语句上使用await,并且副本准确地解释了它与使用Wait()之间的区别。
标签: c# multithreading async-await task wait