Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从任务返回null var hs=new HashSet(); foreach(mainclass中的var项) { Task cl1Task=Task.Factory.StartNew(()=> { 如果(!hs_versionids.Contains(item.VersionID)) { 返回新列表(…); } 其他的 { 返回null; } }); Task.WaitAll(cl1Task); }_C#_Task Parallel Library - Fatal编程技术网

C# 从任务返回null var hs=new HashSet(); foreach(mainclass中的var项) { Task cl1Task=Task.Factory.StartNew(()=> { 如果(!hs_versionids.Contains(item.VersionID)) { 返回新列表(…); } 其他的 { 返回null; } }); Task.WaitAll(cl1Task); }

C# 从任务返回null var hs=new HashSet(); foreach(mainclass中的var项) { Task cl1Task=Task.Factory.StartNew(()=> { 如果(!hs_versionids.Contains(item.VersionID)) { 返回新列表(…); } 其他的 { 返回null; } }); Task.WaitAll(cl1Task); },c#,task-parallel-library,C#,Task Parallel Library,它不会等待任务完成。问题在于return null,因此如何返回空任务?您的代码没有意义,原因有两个: 启动不包含任何长时间运行的代码的任务是无用的。你不会从中获得任何好处 等待任务在启动后立即完成,完全否定了任务的效果:您仍然在阻塞主线程 如果任务中的代码确实如此简单,请将代码更改为: var hs = new HashSet<int>(); foreach(var item in mainclass) { Task<List<Class1>> c

它不会等待任务完成。问题在于return null,因此如何返回空任务?

您的代码没有意义,原因有两个:

  • 启动不包含任何长时间运行的代码的任务是无用的。你不会从中获得任何好处
  • 等待任务在启动后立即完成,完全否定了任务的效果:您仍然在阻塞主线程
  • 如果任务中的代码确实如此简单,请将代码更改为:

    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 );
    }
    
    foreach(mainclass中的变量项)
    {
    列出结果;
    如果(!hs_versionids.Contains(item.VersionID))
    { 
    结果=新列表(…);
    } 
    其他的
    { 
    结果=空;
    } 
    } 
    
    如果任务中的代码确实做了一些昂贵的事情,请将代码更改为:

    foreach(var item in mainclass) 
    {
        List<Class1> result;
        if (!hs_VersiodIDs.Contains(item.VersionID)) 
        { 
             result = new List<Class1>(.....); 
        } 
        else 
        { 
            result = null; 
        } 
    } 
    
    var tasks=newlist();
    foreach(mainclass中的var项)
    {     
    Task cl1Task=Task.Factory.StartNew(()=>
    {     
    如果(!hs_versionids.Contains(item.VersionID))
    {     
    返回新列表(…);
    }     
    其他的
    {     
    返回null;
    }     
    });     
    任务。添加(cl1Task);
    } 
    //注意,WaitAll在循环之外,因此现在我们的任务都可以并行运行
    Task.WaitAll(tasks.ToArray());
    
    代码不全,我回来时问题就来了null@Haider然后请给出一个简单的例子来说明这个问题。“
    return null;
    ”本身并没有什么神奇之处,它本身并不是您遇到任何问题的原因。对不起,这个问题不在这个函数中,而是并行出现的。foreach我在它的列表中添加了一些关于如何使用concurrentbag的一两个值为null的信息,所有这些都工作正常,但性能很低。再一次抱歉all@Haider:“性能很低”-我建议你再次阅读我的答案,并试图明确理解代码毫无意义的第二个原因。@Haider:在这种情况下,你几乎忘记了问题中的每一个重要细节。。。请记住这一点,以便下次使用。
    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());