Hec*_*tor 5 c# lambda task async-await
我有以下 -
for (int i = 0; i < N; ++i)
{
var firstTask = DoSomething(...);
var task = anotherTask.ContinueWith(
(t) => ProcessResult(i, t.Result));
}
Run Code Online (Sandbox Code Playgroud)
问题是传递给ProcessResult的i的值似乎是它启动时的值,而不是创建它时的迭代值.
防止这种情况的最佳方法是什么?
您需要将 的值捕获i到其自己的变量中。
for (int i = 0; i < N; ++i)
{
var count = i;
var firstTask = DoSomething(...);
var task = anotherTask.ContinueWith(
(t) => ProcessResult(count, t.Result));
}
Run Code Online (Sandbox Code Playgroud)
例子:
for (int i = 0; i < 5; ++i)
{
var a = i;
var task = Task.Delay(0).ContinueWith((t) => a.Dump());
}
Run Code Online (Sandbox Code Playgroud)
这输出类似:
0
2
1
4
3
Run Code Online (Sandbox Code Playgroud)
但是这个:
for (int i = 0; i < 5; ++i)
{
var task = Task.Delay(0).ContinueWith((t) => i.Dump());
}
Run Code Online (Sandbox Code Playgroud)
输出:
5
5
5
5
5
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
231 次 |
| 最近记录: |