var hs = new HashSet<int>(); foreach(var item in mainclass) { Task<List<Class1>> cl1Task = Task.Factory.StartNew<List<Class1>>(() => { if (!hs_VersiodIDs.Contains(item.VersionID)) { return new List<Class1>(.....); } else { return null; } }); Task.WaitAll(cl1Task ); }
它不等待任务完成.问题是返回null所以我怎么能返回空任务?
解决方法
您的代码没有任何意义,原因有两个:
>启动不包含任何长时间运行代码的任务是没用的.你不会从中获益
>等待任务在启动后立即完成,完全否定了任务的效果:您仍在阻止主线程.
foreach(var item in mainclass) { List<Class1> result; if (!hs_VersiodIDs.Contains(item.VersionID)) { result = new List<Class1>(.....); } else { result = null; } }
var tasks = new List<Task>(); foreach(var item in mainclass) { Task<List<Class1>> cl1Task = Task.Factory.StartNew<List<Class1>>(() => { if (!hs_VersiodIDs.Contains(item.VersionID)) { return new List<Class1>(.....); } else { return null; } }); tasks.Add(cl1Task); } // note,WaitAll is outside the loop,so Now our tasks can all run in parallel Task.WaitAll(tasks.ToArray());
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。