c# - 异步添加元素到列表

标签 c# asp.net asynchronous

我在 Asp.net C#、.net 3.5 中遇到问题

我有下面的代码:

List<object> objectList = new List<object>();

foreach(var item in listItem)
{
  object obj = getData (item);
  objectList.add(obj);
}
Console.Write("Finish all");

每次 getData (item); 触发大约需要 1 秒;

我想让 ListItem 中的所有项目同时运行(这里是 getData(item)),然后在 foreach 完成 Console.write 后执行(“全部完成”)

我该怎么做? 任何想法将不胜感激!

最佳答案

您可以使用 ThreadPoolManualResetEvent :

int itemCount = listItem.Length;
List<object> objectList = new List<object>();
ManualResetEvent[] resetEvents = new ManualResetEvent[itemCount];

for (int i = 0; i < itemCount; i++)
{
    var item = listItem[i];

    resetEvents[i] = new ManualResetEvent(false);
    ThreadPool.QueueUserWorkItem(new WaitCallback((object index) =>
    {
        object obj = getData(item);

        lock (objectList)
            objectList.add(obj);

        resetEvents[(int)index].Set();
    }), i);
}

WaitHandle.WaitAll(resetEvents);
Console.Write("Finish all");

ThreadPool 将在后台运行任务,当前线程将等待所有 worker 完成 ManualResetEvent。

关于c# - 异步添加元素到列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14517210/

相关文章:

c# - 添加到面板时用户控件消失

asp.net - ASP.NET 站点的负载共享

python - 如何捕获源自reactor.stop()的Deferred中未处理的错误

c# - C++ DLL 函数似乎在 C# 中不起作用

c# - OpenTK 中的立方体贴图

C# 多线程

c# - 递归目录遍历/树消耗大量内存

c# - ScrapySharp NavigateToPage 时继续卡住加载

asp.net - 从 asp.net 核心 Controller 方法返回结果后如何继续处理?

java - 在 JAX-RS api 中实现线程池