c# - 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);
解决方案
我认为问题在于您需要捕获I
循环内部的值,而不是直接在任务中使用它。
尝试这样的事情:
for (int i = 0; i < totalPairs; i++)
{
var value = i;
Proc[i] = Task.Run(() => pairsProcess(Pairs[value], 6 + value));
}
推荐阅读
- html - 为什么我在使用路由处理当前页面时渲染到主页
- python - 为什么从 pandas 中的 csv 读取将列数据类型作为对象?
- javascript - 从不同的组件(ReactJS)导航回来时,组件没有呈现输出
- javascript - “onchange = this.form.submit()”在 html(ejs) 中不起作用
- ruby-on-rails - 行动电缆。WebSocket 在连接建立之前关闭
- sparql - 如何编写 SPARQL 查询以从 OWL 文件中提取
- magnetometer - Geometrics MagPick 在逆偶极子建模期间冻结
- ios - Visual Studio - Xamarin Forms 应用 - 无法为证书设置自动预配
- python - 在 Python Azure 函数中访问绑定表达式值
- visual-studio-code - 当我输入“git branch”时,我的集成 vscode 终端(zsh)会打开 git cli