我在网站上搜索了这个问题,但是找不到解决我问题的方法。
下面的代码可以正常工作,但不能在功能中使用。
运行本程序时,必须使用给定的参数调用pairprocess函数,并将作为参数给出的字符串和(i + 6)值写入屏幕。
但是尽管代码工作正常,但它并不能满足我的要求。
我在Task中尝试过。厂。 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}");
}
}
这是我通常想要的。
我将I值加6。
EURUSD 0 + 6 = 6倍
对:EURUSD计数器:1/6
对:EURUSD计数器:2/6
对:EURUSD柜台:3/6
对:EURUSD柜台:4/6
对:EURUSD柜台:5/6
对:EURUSD柜台:6/6
GBPUSD 1 + 6 = 7倍
对:GBPUSD计数器:1/7
对:GBPUSD计数器:2/7
对:GBPUSD柜台:3/7
对:GBPUSD柜台:4/7
对:GBPUSD柜台:5/7
对:GBPUSD柜台:6/7
对:GBPUSD柜台:7/7
EURGBP 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);
答案 0 :(得分:1)
我认为问题在于您需要在循环内捕获I
的值,而不是直接在任务中使用它。
尝试这样的方法:
for (int i = 0; i < totalPairs; i++)
{
var value = i;
Proc[i] = Task.Run(() => pairsProcess(Pairs[value], 6 + value));
}