gpt4 book ai didi

c# - 从任务返回 null

转载 作者:行者123 更新时间:2023-11-30 12:31:59 25 4
gpt4 key购买 nike

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

它不会等待任务完成。问题是 return null 那么我怎样才能返回空任务?

最佳答案

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

  1. 启动一个不包含任何长时间运行代码的任务是没有用的。你不会从中获得任何好处
  2. 等待任务在启动后立即完成,完全否定了任务的效果:您仍在阻塞主线程。

如果任务中的代码确实如此简单,请将您的代码更改为:

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

关于c# - 从任务返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12368583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com