在新线程中触发方法的最佳方式
本文关键字:方法 最佳 方式 新线程 线程 | 更新日期: 2023-09-27 18:05:12
我有对象数组,我需要它们在一个单独的线程中执行。我认为最好使用异步调用开始/结束。调用,但即使它在一个新线程上执行,它也在等待一个线程的回调返回。但是我需要同时在不同的线程中触发所有的对象。
但是我的另一个问题是,如果我为每个对象创建一个线程,它将是昂贵的。请告诉我完成这项任务的最佳方法。
下面是我尝试过的assync方法,
object[10] objs = new objects[];
foreach (object o in objs)
{
// method needs to process ASAP
StartProcessing(o);
}
void StartProcessing(object o)
{
}
由于在问题中没有任何特殊要求来触发方法,我看不出QueueUserWorkItem
不适合的任何原因:
foreach(object o in objs)
{
// start processing is a return void method needs to process ASAP
var v = o;
ThreadPool.QueueUserWorkItem(_ => StartProcessing(v));
}
您可以使用任务来实现。
object[] objs = new object[10];
List<Task> tasks = new List<Task>();
foreach (object o in objs)
{
// method needs to process ASAP
var localObj = o;
tasks.Add(Task.Factory.StartNew(() => StartProcessing(localObj)));
}
try
{
Task.WaitAll(tasks.ToArray());
}
catch (AggregateException ae)
{
// handle the exceptions
}
可以使用Parallel。对于数组中的每个元素,它将启动Task,并在所有Task完成时同步返回。
Parallel.ForEach(objs, StartProcessing);