首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ManualResetEvent与任务问题

ManualResetEvent与任务问题
EN

Stack Overflow用户
提问于 2011-02-13 21:04:42
回答 1查看 2.2K关注 0票数 0

我一直在开发一个自定义多线程服务器,它使用HTTP与客户端进行通信。为了创建新线程,我一直在使用Task.Factory.StartNew()方法。对于同步,我一直在使用ManualResetEvent对象。

下面是代码的本质:

代码语言:javascript
复制
namespace ThreadTest {
    class Program {        
        private readonly ManualResetEvent _event = new ManualResetEvent(false);

        public void Start() {
            for (int i = 0; i < 100; i++) {
                int num = i;
                Task.Factory.StartNew(() => {
                    Console.WriteLine("Task {0} Started", num);
                    _event.WaitOne();
                });
            }  
        }      

        static void Main(string[] args) {
            var test = new Program();
            test.Start();
            Console.ReadLine();
        }
    }
}

在真正的代码中,_event对象最终会被Set调用以释放等待的任务。

我遇到的问题是,这段代码在我的开发机器上工作得很好(它是双核的,每个内核有两个线程,使用MS .NET 4运行时),但是不能在我的服务器上工作(它是单个内核,每个内核有一个线程,使用Mono2.8运行时)。我的开发机器上的输出是:

代码语言:javascript
复制
Task 0 Started
Task 1 Started
Task 3 Started
Task 2 Started
Task 4 Started
Task 5 Started
...

而服务器输出是

代码语言:javascript
复制
Task 53 Started

我的问题是:我对ManualResetEvent或任务有什么误解?为什么TaskFactory继续在双核而不是单核上执行任务?

更新:

我刚在我的双核(每个内核一个线程) mac笔记本电脑上试了一下,我得到了输出。

代码语言:javascript
复制
Task 97 Started
Task 1 Started

然后什么都没有。我还在我的开发机器(4个线程)上试用了Mono,得到了:

代码语言:javascript
复制
Task 99 Started
Task 2 Started
Task 98 Started
Task 0 Started

所以它看起来就像一只带有Mono的虫子。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-26 20:05:53

原来是Mono的一个窃听器。我是提交一份报告,现在已经修好了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4986866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档