我想知道线程或等待回调何时在执行之前的代码之前完成。这是我目前的代码:
foreach (var ip in iPAddresses)
{
string loopIp = ip;
WaitCallback func = delegate (object state)
{
if (PingHost(loopIp, portNumber))
{
Console.WriteLine("IP Found at: " + loopIp + ":" + portNumber);
IPAddressesAndPortNumbersList.Add(loopIp, portNumber);
}
};
ThreadPool.QueueUserWorkItem(func);
//I want the below to be executed after the thread has finished completely
Console.WriteLine("I have finished...");
}
解决方案:我知道您可以使用普通线程并执行此功能,但是,对于我正在进行的工作,这样做会很慢。我发现这是在waitcallback函数中完成require工作的最快方法
答案 0 :(得分:0)
我认为你需要Task.WaitAll或Task.WhenAll。以下是示例:
当您想要并行执行某些任务(并且没有返回值)时,Task.WaitAll及其重载。
var tasks = new[]
{
Task.Factory.StartNew(() => DoSomething1()),
Task.Factory.StartNew(() => DoSomething2()),
Task.Factory.StartNew(() => DoSomething3())
};
Task.WaitAll(tasks);
Task.WhenAll当您想要使用返回值执行某些任务时,它会执行操作并将结果放入数组中。它是线程安全的,您不需要使用线程安全的容器并自己实现添加操作。
var tasks = new[]
{
Task.Factory.StartNew(() => GetSomething1()),
Task.Factory.StartNew(() => GetSomething2()),
Task.Factory.StartNew(() => GetSomething3())
};
var things = Task.WhenAll(tasks);