线程并行调用,操作

时间:2011-06-30 10:30:16

标签: c# .net windows multithreading parallel-processing

我的代码如下

public void DownloadConcurrent(Action<string> Methord)
{
    Action<string>[] methordList = new Action<string>[Concurent_Downloads];

    for (int i = 0; i < Concurent_Downloads; i++)
    {
        methordList[i] = Methord;
    }

    Parallel.Invoke(methordList);
}

Parallel.Invoke 给出错误:

"cannot convert from 'System.Action<string>[]' to 'System.Action[]'"

它正在调用的方法是

public void DownloadLinks(string Term)
{ 
}

3 个答案:

答案 0 :(得分:5)

检查Parallel.ForEach,如下所示

   static void Main(string[] args)
    {
        List<string> p = new List<string>() { "Test", "Test2", "Test3"};
        Parallel.ForEach(p, Test);
    }


    public static void Test(string test)
    {
        Debug.WriteLine(test);
    }

这应该是你的伎俩

HTH 多米尼克

答案 1 :(得分:2)

在您的情况下,使用

会更容易
  

Parallel.ForEach

在您的字符串列表上而不是使用

  

Parallel.Invoke

附加参数。如果你想坚持使用Parallel.Invoke,请告诉我。

答案 2 :(得分:1)

当您的代码向其传递Parallel.Invoke数组时,

Action接受Action<string>数组。你能做的是:

public void DownloadConcurrent(Action<string> Methord)
{
    Action<string>[] methordList = new Action<string>[Concurent_Downloads];

    var r = methordList.Select(a => (Action)(() => a("some_str"))).ToArray();

    Parallel.Invoke(r);
}

您需要将some_str替换为每个操作的适当值