C# 如果在方法中启动了新线程,该方法何时返回

C# 如果在方法中启动了新线程,该方法何时返回,c#,C#,假设我有如下代码: public SomeMethod() { foreach (x...) { if (SomeCondition) { var SomeVariable = x; Task.Factory.StartNew(() => SomeOtherMethod(SomeVariable)); } } return SomeValue; } 如果在新线程中调用并启动了SomeOtherMet

假设我有如下代码:

public SomeMethod() {

   foreach (x...)
   {
     if (SomeCondition)
     {
        var SomeVariable = x;
        Task.Factory.StartNew(() => SomeOtherMethod(SomeVariable));
     }
   }

   return SomeValue;
}
如果在新线程中调用并启动了
SomeOtherMethod
,那么a)
SomeMethod
是否要等到该线程运行完毕后再返回,或者b)该方法返回,然后
SomeOtherMethod
的线程即使在
SomeMethod
返回后也会继续运行

我问这个问题的原因是我需要等到所有的
SomeOtherMethods
完成后才能退出SomeMethod

谢谢。

可用于跟踪并等待所有任务完成。StartNew返回一个任务。跟踪数组中的所有返回值并将其传递给WaitAll

例如

List tasks=newlist();
while(条件)
{
如果(真)
{                    
任务温度=Task.Factory.StartNew(()=>0);
任务。添加(临时);
}
//...
}
Task.WaitAll(tasks.ToArray());

收集集合中的所有任务,然后调用它:

as
Task.whalll
本身不阻塞,但返回一个任务,该任务在所有其他任务都已阻塞时完成。(注意这里WhenAll和WaitAll之间的区别-非常不同的方法!)


(另外,在.NET 4.5中,为了方便起见,您可以使用而不是
Task.Factory.StartNew

这是您面临的测验吗?提示:线程是干什么用的?这是我的代码中的一种情况。线程是数据库调用。您真正需要的是如何等待另一个线程完成。那已经是了。那么我想问题应该是“如何等待另一个线程完成?”哈哈…你只是需要用你的4.5知识来跟我比试一下!!我只是喜欢乔恩的答案!谢谢
        List<Task> tasks = new List<Task>();
        while (condition)
        {
            if (true)
            {                    
                Task temp = Task.Factory.StartNew(() => 0);
                tasks.Add(temp);
            }
            //...
        }

        Task.WaitAll(tasks.ToArray());
List<Task> tasks = new List<Task>();
foreach (x...)
{
    if (SomeCondition)
    {
        var someVariable = x;
        tasks.Add(Task.Factory.StartNew(() => SomeOtherMethod(someVariable));
     }
}
Task.WaitAll(tasks.ToArray());
await Task.WhenAll(tasks);