首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

请问一个多线程的有关问题。多线程,返回值

2013-04-21 
请教一个多线程的问题。。。。。。多线程,返回值。public static string GetResult(string str){//简化了逻辑Thre

请教一个多线程的问题。。。。。。多线程,返回值。


        public static string GetResult(string str)
        {
            //简化了逻辑
            Thread.Sleep(2000);
            return "传进来的文本是:" + str;
        }

        public static Dictionary<string, string> dic = new Dictionary<string, string>();

        static void Main(string[] args)
        {
            //测试数据
            dic.Add("AAAA","");
            dic.Add("BBBB", "");
            dic.Add("CCCC", "");

            //遍历Dictionary,使用其key作为参数调用GetResult方法,并将返回值记录在对应的value中
            List<string> keys = dic.Keys.ToList();
            for (int i = 0; i < keys.Count; i++)
            {
                //请问这里如何使用多线程去调用呢?
                dic[keys[i]] = GetResult(keys[i]);
            }

            //等待调用完成打印所有信息
            for (int i = 0; i < keys.Count; i++)
            {
                Console.WriteLine(dic[keys[i]]);
            }
        }
多线程 dictionary 线程同步
[解决办法]

Thread t = new Thread(new ThreadStart(()=>{GetResult(keys[i]}));
t.Start();

[解决办法]
        public static void GetResult(object state)
        {
            object[] paras = state as object[];
            int index = (int)paras[0];
            String str = paras[1] as String;
            ManualResetEvent mre = paras[2] as ManualResetEvent;
            lock (dic)


            {
                //简化了逻辑
                dic[dic.Keys.ToList()[index]] = "传进来的文本是:" + str;
            }
            //Thread.Sleep(2000);
            mre.Set();
            //return "传进来的文本是:" + str;
        }

        public static Dictionary<string, string> dic = new Dictionary<string, string>();

[MTAThread]
static void Main(string[] args)
        {
            //测试数据
            dic.Add("AAAA", "");
            dic.Add("BBBB", "");
            dic.Add("CCCC", "");
            List<ManualResetEvent> waits = new List<ManualResetEvent>();
            //遍历Dictionary,使用其key作为参数调用GetResult方法,并将返回值记录在对应的value中
            List<string> keys = dic.Keys.ToList();
            for (int i = 0; i < keys.Count; i++)
            {
                ManualResetEvent mre = new ManualResetEvent(false);
                waits.Add(mre);
                object[] state = new object[] { i, keys[i], mre };
                ThreadPool.QueueUserWorkItem(new WaitCallback(GetResult), state);
                //请问这里如何使用多线程去调用呢?
                //dic[keys[i]] = GetResult(keys[i]);
            }
            WaitHandle.WaitAll(waits.ToArray());
            //等待调用完成打印所有信息
            for (int i = 0; i < keys.Count; i++)
            {
                Console.WriteLine(dic[keys[i]]);
            }
        }
[解决办法]
试试fastCSharp

            list<string> keys = dic.Keys.getList(); 


            using (fastCSharp.threading.task task = new task(keys.Count))
            {
                for (int i = 0; i < keys.Count; i++)
                {
                    task.Add(index => dic[keys[index]] = GetResult(keys[index]), i);
                }
            }

热点排行