我在网站上寻找这个问题,但我找不到解决问题的办法。
下面的代码工作正常,但在函数中不起作用。
当程序运行时,必须用给定的参数调用对进程函数,并将作为参数的字符串和(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添加到i值.
欧元美元0+6=6倍
1+6=7倍
EURGBP 2+6=8倍
我找到了解决问题的方法。在运行任务之后,线程不得不等待一段时间。我的问题完全解决了。
Proc [i] = Task. Run (() = > A. pairsprocess (Pairs [i], 6 + i));
System. Threading. Thread. Sleep (100);
发布于 2018-12-07 17:57:05
我认为问题在于,您需要在循环中捕获I
的值,而不是直接在任务中使用它。
试着做这样的事情:
for (int i = 0; i < totalPairs; i++)
{
var value = i;
Proc[i] = Task.Run(() => pairsProcess(Pairs[value], 6 + value));
}
https://stackoverflow.com/questions/53678660
复制