加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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());

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读