首页 > 解决方案 > C# 运行多个任务

问题描述

我在网站上搜索了这个问题,但找不到解决问题的方法。

下面的代码可以正常工作,但不能在函数中工作。

当程序运行时,必须使用给定的参数调用pairsprocess函数,并将作为参数给出的字符串和(i + 6)值写入屏幕。

但是尽管代码有效,但它并没有做我写的事情。

我在任务中尝试过。工厂。StartNew 并没有用那种方法。

 static void Main(string[] args) 
    {
        string[] Pairs = new string[] { "EURUSD", "GBPUSD", "EURGBP" };
        int totalPairs = Pairs.Count();
        Task[] Proc = new Task[totalPairs];
        Console.WriteLine($"Pairs Count : {Pairs.Count()}");
        for (int i = 0; i < totalPairs; i++)
        {
            Proc[i] = Task.Run(() => pairsProcess(Pairs[i],6+i));
        }

    }

    public static void pairsProcess(string a,int Counter)
    {
        for (int i = 0; i < Counter; i++)
        {
            Console.WriteLine($"Pairs : {a} Counter : {i+1} / {Counter}");
        }
    }

这是我通常想要的。

我在我看重的值上加 6。

欧元兑美元 0 + 6 = 6 次

  • 货币对:EURUSD 柜台:1/6

  • 货币对:EURUSD 柜台:2/6

  • 货币对:EURUSD 柜台:3/6

  • 货币对:欧元兑美元柜台:4/6

  • 货币对:EURUSD 柜台:5/6

  • 货币对:欧元兑美元柜台:6/6

英镑兑美元 1 + 6 = 7 倍

  • 对:GBPUSD 柜台:1/7

  • 货币对:GBPUSD 柜台:2/7

  • 货币对:GBPUSD 柜台:3/7

  • 货币对:GBPUSD 柜台:4/7

  • 货币对:GBPUSD 柜台:5/7

  • 货币对:英镑兑美元柜台:6/7

  • 货币对:GBPUSD 柜台:7/7

欧元英镑 2 + 6 = 8 倍

  • 对:EURGBP 柜台:1/8

  • 货币对:EURGBP 柜台:2/8

  • 货币对:EURGBP 柜台:3/8

  • 货币对:EURGBP 柜台:4/8

  • 货币对:EURGBP 柜台:5/8

  • 货币对:EURGBP 柜台:6/8

  • 货币对:EURGBP 柜台:7/8

  • 货币对:EURGBP 柜台:8/8

我找到了解决我的问题的方法。运行 TASK 后,线程不得不等待一段时间。我的问题完全解决了。

Proc [i] = Task. Run (() = > A. pairsprocess (Pairs [i], 6 + i));
            System. Threading. Thread. Sleep (100);

标签: c#parallel-processingtask-parallel-librarymultitasking

解决方案


我认为问题在于您需要捕获I循环内部的值,而不是直接在任务中使用它。

尝试这样的事情:

for (int i = 0; i < totalPairs; i++)
{
    var value = i;
    Proc[i] = Task.Run(() => pairsProcess(Pairs[value], 6 + value));
}

推荐阅读