请教一个多线程的问题。。。。。。多线程,返回值。
多线程 dictionary 线程同步
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]]);
}
}
Thread t = new Thread(new ThreadStart(()=>{GetResult(keys[i]}));
t.Start();
{
//简化了逻辑
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);
}
}