相关疑难解决方法(0)

C#:监控 - 等待,脉冲,PulseAll

我有理解困难时期 Wait(),Pulse(),PulseAll().他们都会避免僵局吗?如果您解释如何使用它们,我将不胜感激?

c# multithreading

49
推荐指数
3
解决办法
4万
查看次数

快速和最佳生产者/消费者队列技术BlockingCollection与并发队列

我在C#3.0和Monitor.Enter中使用Generic.Queue,等待,在使用队列之前退出等待(等待元素入队).现在我转到C#4.

任何人都可以建议我哪一个是快速的,尤其是避免锁定..

BlockingCollection vs concurrentQueue或其他任何东西......

注意.我不想限制我的制片人

提前致谢..

concurrency consumer producer c#-3.0

39
推荐指数
1
解决办法
6万
查看次数

尝试在ConcurrentQueue中出列队列

如果Queue中没有项目,ConcurrentQueue中的TryDequeue将返回false.

如果队列是空的,我需要我的队列将等待,直到新项目被添加到队列中并且它将新队列出列,并且该过程将继续这样.

我应该在C#4.0中使用monitor.enter,wait,pulse或任何更好的选项

c# producer-consumer concurrent-queue

24
推荐指数
1
解决办法
2万
查看次数

c#Threadpool - 限制线程数

我正在开发一个控制台应用程序

我想使用Threadpool来执行Web下载.这是一些假代码.

 for (int loop=0; loop< 100; loop++)
 {
     ThreadPool.QueueUserWorkItem(new WaitCallback(GetPage), pageList[loop]);
 }


snip

private static void GetPage(object o)
{
    //get the page
}
Run Code Online (Sandbox Code Playgroud)

如何防止我的代码启动两个以上(或十个或其他)同步线程?

我试过了

    ThreadPool.SetMaxThreads(1, 0);
    ThreadPool.SetMinThreads(1, 0);
Run Code Online (Sandbox Code Playgroud)

但他们似乎没有任何影响.

c# multithreading threadpool

20
推荐指数
4
解决办法
5万
查看次数

如何使用ConcurrentQueue <T>进行线程处理

我想弄清楚使用队列的最佳方法是什么.我有一个返回DataTable的进程.反过来,每个DataTable都与之前的DataTable合并.有一个问题,在最终的BulkCopy(OutOfMemory)之前要保留的记录太多.

所以,我已经确定我应该立即处理每个传入的DataTable.考虑一下ConcurrentQueue<T>......但我不知道该WriteQueuedData()方法如何知道将一个表出列并将其写入数据库.

例如:

public class TableTransporter
{
    private ConcurrentQueue<DataTable> tableQueue = new ConcurrentQueue<DataTable>();

    public TableTransporter()
    {
        tableQueue.OnItemQueued += new EventHandler(WriteQueuedData);   // no events available
    }

    public void ExtractData()
    {
        DataTable table;

        // perform data extraction
        tableQueue.Enqueue(table);
    }

    private void WriteQueuedData(object sender, EventArgs e)
    {
        BulkCopy(e.Table);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的第一个问题是,除了我实际上没有订阅任何事件的事实,如果我ExtractData()异步调用这将是我需要的全部内容吗?第二,我是否缺少关于ConcurrentQueue<T>函数的方式以及需要某种形式的触发器与排队对象异步工作的东西?

更新 我刚刚派生出一个ConcurrentQueue<T>具有OnItemQueued事件处理程序的类.然后:

new public void Enqueue (DataTable Table)
{
    base.Enqueue(Table);
    OnTableQueued(new TableQueuedEventArgs(Table));
}

public void OnTableQueued(TableQueuedEventArgs table)
{
    EventHandler<TableQueuedEventArgs> handler = TableQueued; …
Run Code Online (Sandbox Code Playgroud)

c# queue multithreading concurrent-collections

18
推荐指数
2
解决办法
5万
查看次数

在.Net中实现并行任务队列

一个图像说的不仅仅是文字,所以这里基本上就是我想要实现的目标:(
为了简洁起见,我还使用了水果类比)
在此输入图像描述

我过去很多次使用不同的.Net类之王(BackGroundWOrkers,ThreadPool,Self Made Stuff ......)做过这种事情.

我在这里要求提供建议并获得有关如何有效地做到这一点的新想法.
这是一个高计算程序,因此我收到数百万(结构相似但内容不相似)的数据,这些数据必须排队才能根据其内容类型进行处理.因此,我想避免为每个要处理的单个数据创建并行任务(这会使CPU过载并且设计不佳恕我直言).这就是为什么我想到只有一个线程为EACH数据TYPE运行,专门用于处理它(知道"Press Juice"方法是通用的并且独立于要按下的水果)

欢迎任何想法和实施建议.
我可以自由地提供任何进一步的细节.

.net c# multithreading task-parallel-library

18
推荐指数
2
解决办法
7109
查看次数

.NET上的线程安全阻塞队列实现

我正在寻找.NET的线程安全阻塞队列的实现.通过"线程安全阻塞队列"我的意思是: - 线程安全访问队列,其中Dequeue方法调用阻塞一个线程,直到其他线程放入(Enqueue)某个值.

到目前为止,我发现了这个:http://www.eggheadcafe.com/articles/20060414.asp (但它适用于.NET 1.1).

有人可以评论/批评这种实施的正确性.或建议另一个.提前致谢.

.net queue collections multithreading

17
推荐指数
2
解决办法
2万
查看次数

连续检查队列<T>

我想要一个函数在一个线程上连续检查队列是否有新的添加

显然,可以选择连续循环播放睡眠,但我希望减少浪费.

我考虑了某种类型的等待句柄,然后让队列发出信号,但我无法安全地覆盖Enqueue,因为它不是虚拟的.

现在我正在考虑封装一个Queue<T>作为我最好的选择,但我想问你好人,如果有更好的人!

我的想法是:我希望许多线程访问套接字连接,同时保证他们只读取其消息的响应,所以我将有一个线程调度和读取响应,然后用响应数据执行回调(以纯文本格式)

.net c# multithreading thread-safety

13
推荐指数
1
解决办法
4158
查看次数

C#线程和队列

这不是关于我能够或应该以最佳方式利用队列的不同方法,而是我所看到的对我来说毫无意义的事情.

void Runner() {
    // member variable
    queue = Queue.Synchronized(new Queue());
    while (true) {
        if (0 < queue.Count) {
            queue.Dequeue();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是在一个线程中运行的:

var t = new Thread(Runner);
t.IsBackground = true;
t.Start();
Run Code Online (Sandbox Code Playgroud)

其他事件是"排队"其他地方.我所见到的是在一段时间内,Dequeue实际上会抛出InvalidOperationException,队列为空.这应该是不可能看到计数如何保证那里有东西,我很肯定没有别的东西是"出列".

问题:

  1. Enqueue是否有可能在项目完全进入队列之前实际增加计数(无论这意味着什么......)?
  2. 线程是否有可能在Dequeue语句中以某种方式重新启动(到期,重置...),但是在它已经删除了一个项目之后立即?

编辑(澄清):

这些代码片段是实现后台帮助程序线程的Wrapper类的一部分.此处的Dequeue是唯一的Dequeue,并且所有Enqueue/Dequeue都在Synchronized成员变量(队列)上.

c# multithreading

11
推荐指数
1
解决办法
3万
查看次数

如何在指定的线程上执行代码

在指定的线程上执行某些代码有什么方法?所以让我们假设我有一个Thead和一个委托,我需要在这个线程上执行这个委托.我该如何实现它?

我对SynchronizationContext等基础设施不感兴趣,我想知道手动实现这种行为的方法.

.net c#

11
推荐指数
2
解决办法
8331
查看次数