c# – 从任务返回null
发布时间:2020-12-15 17:28:53 所属栏目:百科 来源:网络整理
导读:var hs = new HashSetint();foreach(var item in mainclass){ TaskListClass1 cl1Task = Task.Factory.StartNewListClass1(() = { if (!hs_VersiodIDs.Contains(item.VersionID)) { return new ListClass1(.....); } else { return null; } }); Task.WaitAll
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()); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |