c# 修改代码,按顺序循环执行 参考代码 Task tss = new Task(() => { DisplayConsole("正在执行手工同步..."); foreach (ServiceNode item in items) { // Thread.Sleep(1000); DataSynch.StartSynchMutiServer(new Action<string>(DisplayConsole), new Action<string>(DisplayStatus), item, _lisTag); //模拟工作过程 } }); tss.Start(); tss.ContinueWith((task) => { DisplayConsole("手工同步完成..."); this.Invoke(new Action(() => { 执行同步ToolStripMenuItem.Enabled = true; toolStripMenuItem1.Enabled = true; GC.Collect(); })); });
时间: 2023-12-16 15:06:42 浏览: 133
您可以使用以下代码,将任务按顺序循环执行:
```
Task tss = Task.CompletedTask;
foreach (ServiceNode item in items)
{
ServiceNode currentItem = item;
tss = tss.ContinueWith((task) =>
{
DisplayConsole("正在执行手工同步...");
DataSynch.StartSynchMutiServer(new Action<string>(DisplayConsole), new Action<string>(DisplayStatus), currentItem, _lisTag);
DisplayConsole("手工同步完成...");
});
}
tss.ContinueWith((task) =>
{
this.Invoke(new Action(() =>
{
执行同步ToolStripMenuItem.Enabled = true;
toolStripMenuItem1.Enabled = true;
GC.Collect();
}));
});
```
这里我们将任务的执行体放到了 `ContinueWith` 中,并在每次循环中将当前的 `ServiceNode` 对象传递给执行体。这样,每个任务会依次执行,保证了任务的顺序性。同时,我们将最后一个任务的回调放到了最后,以确保所有任务执行完成后再执行回调。
阅读全文